2

呼び出し中にスレッドがロックされる

new URL(url).openConnection();

スレッド ダンプの一部は次のとおりです。

sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
    - locked <0x00000007056a2498> (a sun.net.www.protocol.http.HttpURLConnection)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)

でロックされているように見えます

"JakartaHttpHandler-http-timeout-pool-12-thread-1" daemon prio=10 tid=0x0000000046bb6800 nid=0x162 waiting on condition [0x00000000431b7000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007521c68b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)

最後にヒープの詳細は、

compacting perm gen  total 41408K, used 41295K [0x00000007fae00000, 0x00000007fd670000, 0x0000000800000000)
   the space 41408K,  99% used [0x00000007fae00000, 0x00000007fd653e58, 0x00000007fd654000, 0x00000007fd670000)

例外をスローせずにスレッドは続行しません。

まず、変更を予定してい-XX:MaxPermSizeます。他にできることはありますか?

きっと、人々はこの例外に直面したに違いありません。

前もって感謝します。

4

2 に答える 2

1

さらに下の「connect()」呼び出しで実際に立ち往生している可能性はありますか?

あなたが探しているコードは、おそらく次のようなものです。

    HttpURLConnection connection = new URL(url).openConnection();
    connection.setConnectTimeout(10000);
    connection.setReadTimeout(10000);
    connection.connect();

これにより、接続オブジェクトが作成され、10 秒の接続タイムアウト (リモート ホストへの接続を試みる) と 10 秒の読み取りタイムアウト (応答の待機に費やすことができる時間) に設定されます。非常に遅いネットワークを使用している場合、最初の値を高くする必要があると考えられます。一部のリソースでの長時間の操作が原因でサービスの応答に時間がかかる場合は、2 番目の値を増やす必要がある場合があります。いずれにせよ、デフォルトは無限大であり、これはおそらく実動システムにとっては良い考えではありません。

于 2013-04-11T19:13:26.603 に答える
0

スタック トレースを少し上に移動します。アプリケーションは、XSD を取得するために、おそらく SpringFramework.org などの外部 Web サイトへの接続を開いている可能性があります。

それらの Web サイトが何であるかを確認し、wget を使用して、アプリケーションがデプロイされているマシンからアクセスできるかどうかを確認します。

于 2012-08-24T11:53:43.687 に答える