|
|
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
Есть программа типа сетевого паука- скачивает огромное количество мелких файлов. Через несколько часов (7-8 конкретно) работы она намертво зависает в вызове метода openStream в классе java.net.URL. Конкретно - lookupAllHostAddr класса java.net.Inet6AddressImpl jconsole показывает плавный рост памяти от 0.9Гб до 1.2Гб с сборками мусора каждый полтора часа. Как локализовать эту проблему? Что смотреть надо? Может просто как-то мониторить процессы и жёстко рубить их? ubunta 13.10 java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) -- Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 09:26:50 |
|
||
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
Да, код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 11:26:01 |
|
||
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
А теперь правильный ответ :) Код: sql 1. 2. 3. 4. 5. 6. Если адрес левый (что у меня бывает), то коннект будет не закрыт, сокет потерян. Если сокеты закончатся- то любая операция зависает. Как-то так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 16:23:26 |
|
||
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
может всё-таки результат url.openConnection() закрывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 16:29:19 |
|
||
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
имхо, вот этот код надо как минимум в try засунуть. BufferedInputStream origin = new BufferedInputStream(((HttpURLConnection) url.openConnection()).getInputStream()); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 17:23:10 |
|
||
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
Лагманможет всё-таки результат url.openConnection() закрывать? О том я и написал. Правильно писать так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Что не мешает существовать, например, методу openStream в классе URL. Причём там обработки ошибок нет, и если URL приводит к 404, то использование openStream гарантировано приводит к утечкам памяти. Вот такие забавные методы есть в JDK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 11:54:05 |
|
||
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
Alexey TominЧто не мешает существовать, например, методу openStream в классе URL. Причём там обработки ошибок нет, и если URL приводит к 404, то использование openStream гарантировано приводит к утечкам памяти. Вот такие забавные методы есть в JDK! Не понял наезда. Можно побольше конкретики. Что утекает? Connection? Дык он в приведенном коде не во всех сценариях закрывается. Или что не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 12:00:23 |
|
||
|
Зависание сетевого вызова после долгой работы программы.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczAlexey TominЧто не мешает существовать, например, методу openStream в классе URL. Причём там обработки ошибок нет, и если URL приводит к 404, то использование openStream гарантировано приводит к утечкам памяти. Вот такие забавные методы есть в JDK! Не понял наезда. Можно побольше конкретики. Что утекает? Connection? Дык он в приведенном коде не во всех сценариях закрывается. Или что не так? В последнем приведённом коде- сокет закрывается во всех случаях. Т.к. close() у BufferedInputStream делает не только close у InputStream, но и disconnect у HttpURLConnection. Проверено практикой- 10 часов по 40 запросов в секунду отработало, не подавилось (1.5 миллиона раз). Из них порядка процента 404 получал. Но если при попытке создания InputStream будет exception, то надо закрывать HttpURLConnection руками. А это невозможно при использовании URL.openStream() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2013, 12:41:45 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=195&tid=2128017]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 365ms |

| 0 / 0 |
