0

Connectionはタイムアウトになり、その開発者はアイデアのリストの一番下にあります。

ログにはわかりやすいものがあります。

[6/24/10 6:32:34:032 EDT] 0000000d ThreadMonitor W   WSVR0605W: Thread "WebContainer : 136" (0000c53e) has been active for 719542 milliseconds and may be hung.  There is/are 45 thread(s) in total in the server that may be hung.

そして、コードは次のようになります。

    try {
        final URLConnection connection = url.openConnection();
        connection.setConnectTimeout(CONNECT_TIME_SECONDS * 1000);
        connection.setReadTimeout(READ_TIME_SECONDS * 1000);
        is = connection.getInputStream();
        document = builder.parse(is);
    } catch (SAXException e) {
        log.error(e);
        throw new PageContentException(e);
    } finally {
        if (is != null) {
            is.close();
        }
    }

私の推測では、接続タイムアウトが妥当な値に下がる前にurl.openConnection ()が接続を開こうとしていると思いますが、APIには、これをどのように変更するかが示されていません。

何を試すべきかについての提案?

4

4 に答える 4

2

スレッドダンプを取得して、どこでスタックしているのかを確認します。想定しないでください。次に、なぜそれがそこに詰まっているのかがわかります。すでにスレッドダンプがある場合は、スタックトレースを投稿してください。

于 2010-06-24T14:20:38.170 に答える
1

私の推測では、接続タイムアウトが妥当な値に下がる前にurl.openConnection()が接続を開こうとしていると思いますが、APIには、これをどのように変更するかが示されていません。

これはありそうなシナリオだと思います。接続の試行が開始された後に接続タイムアウトを設定することは、機能しない可能性があります、IMO。

何を試すべきかについての提案?

システムプロパティで「sun.net.client.defaultConnectTimeout」プロパティを設定してみましたか?ここに文書化されています。

于 2010-06-24T14:55:54.437 に答える
0

私の推測では、接続タイムアウトが妥当な値に下がる前に、url.openConnection()が接続を開こうとしています。

いいえ。その場合、URLConnection.setConnectionTimeout()は完全に無意味になります。これは、自分よりも早く呼び出す方法がないためです。

于 2010-06-25T00:44:49.000 に答える
-3

それはおそらく「最終」のせいです。なぜそこに入れているのかわかりませんが、ファイナルを削除すると役立つと思います。

于 2010-06-24T14:06:56.410 に答える