1

JDMK ベースのアプリケーションで、com.sun.jdmk.comm.HttpSendSocket の 313 行目で断続的な IOExceptions が発生しますが、その理由がわかりません。これについて Javadoc から知っているのは、入力ストリームの作成中に I/O エラーが発生した場合に IOException が発生することだけですが、どのような種類の I/O エラーが発生したのか、またはなぜ発生したのかはわかりません。このコードは、このエラーが発生する前後の両方で実際に機能しました。

この断続的な問題をデバッグする方法に関するヒントをいただければ幸いです。

HttpSendSocket は私のものではないため、ここにソース コードを貼り付けたくありませんが、IOException 例外がスローされたときに HttpURLConnection conn.getInputStream() を実行していることはわかっています。

独自のバージョンの HttpSendSocket を作成して、それに診断を追加しようと考えましたが、パッケージで保護されたクラスであるため、その方法がわかりませんでした。

以下のスタック トレース:

com.sun.jdmk.comm.CommunicationException: java.io.IOException: HTTP request failed
at com.sun.jdmk.comm.HttpSendSocket.readNotify(HttpSendSocket.java:313)
at com.sun.jdmk.comm.HttpSendInputStream.read(HttpSendInputStream.java:95)
at java.io.FilterInputStream.read(FilterInputStream.java:94)
at java.io.PushbackInputStream.read(PushbackInputStream.java:150)
at com.sun.jdmk.comm.GenericHttpConnectorClient.sendHttp(GenericHttpConnectorClient.java:486)
at com.sun.jdmk.comm.GenericHttpConnectorClient.invokeRemoteOperation(GenericHttpConnectorClient.java:2234)
at com.sun.jdmk.comm.GenericHttpConnectorClient.invoke(GenericHttpConnectorClient.java:1366)

私が言ったように、有益な提案は大歓迎です。

4

2 に答える 2

1

通信例外は、ArrayList メソッド subList を使用して発生しました。ArrayList はシリアライズ可能ですが、subList データはシリアライズ可能ではないため、HttpConnector 経由でデータを取得することはできません。解決策は変更することでした:

List<UserProcessInfo> values = new ArrayList<UserProcessInfo>();
...
values.size() <= 1000 ? values : values.subList(0,1000);

に:

List<UserProcessInfo> values = new ArrayList<UserProcessInfo>();
...
return values.size() <= 1000 ? values : new ArrayList<UserProcessInfo>(values.subList(0,1000));
于 2014-03-19T14:02:19.030 に答える
0

JDMK ソースを IDE にアタッチし、HttpSendSocket にブレークポイントを設定して、デバッグを有効にして実行します。少なくとも IntelliJ では、スタック トレースからクラスを開こうとしてライブラリ ソースをアタッチし、ソースのリンクを選択できます。他のIDEのプロセスがどのようになっているのかはわかりませんが、可能だと思います。

于 2014-03-13T22:15:54.200 に答える