Помогите с тайм-аутом java.net.URLConnection? - PullRequest
0 голосов
/ 24 июня 2010

Время подключения истекло, и разработчик на нем находится в нижней части списка идей.

В логах есть дружественный:

[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 ]

2 голосов
/ 24 июня 2010

Я бы получил дамп потока и увидел, где точно он застрял.Не думайТогда вы можете понять, почему он застрял там.Если у вас уже есть дамп потока, пожалуйста, опубликуйте трассировку стека.

1 голос
/ 24 июня 2010

Мое лучшее предположение состоит в том, что url.openConnection () пытается открыть соединение до того, как тайм-аут соединения был уменьшен до чего-то разумного, но ничто в API не показывает мне, как бы я сделал это иначе.

Я думаю, что это вероятный сценарий.Установка таймаута подключения после начала попытки подключения вряд ли сработает, IMO.

Рекомендации по использованию?

Вы пытались установить "sun.net".client.defaultConnectTimeout "в свойствах системы?Документально здесь .

0 голосов
/ 25 июня 2010

Мое лучшее предположение, что url.openConnection () пытается открыть соединение перед подключением тайм-аут был уменьшен до чего-то разумно.

Нет. Если бы это было так, URLConnection.setConnectionTimeout () был бы совершенно бессмысленным, так как нет способа вызвать его раньше, чем вы.

0 голосов
/ 24 июня 2010

это может быть из-за "финала". Я не уверен, почему вы добавляете туда, но я думаю, что удаление final должно помочь.

...