|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Есть такое вот поделие. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Проблема в том, что иногда выпадает исключение при попытке закрыть OutputStream Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Как я понял, проблема в том, что пока мы пишем - клиент отваливается и дописать не получается. Оно происходит редко и в общем-то никто не жаловался. Вот только сокет остается жить в таком виде до завершения работы программы: Код: plaintext 1. 2. 3. 4.
Виден он только в lsof, в netstat - отсутствует, но думаю это не важно. Естественно в конце концов упираемся в ulimit. Как правильно обработать эту ситуацию? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2018, 21:37 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Про исключение я не правильно наверное написал. Сначала ошибка записи, а потом при закрытии еще одно исключение, которое поглощено? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2018, 22:39 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
HettКак правильно обработать эту ситуацию?- показать тут строку на которой исключение. - сделать тест именно на.... Клиент отвалился. - убрать автоматическое освобождение ресурсов и пробу ручного закрытия канала и ресурсов. - пробовать и сравнить с другими библиотеками и версиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 08:38 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Вроде вот так решилось: Код: java 1. 2. 3. 4. 5. 6.
Т.е. выбрасываем IOException из хендлера. На этму мысль меня навел контракт метода `handle`. Вчера с десяток примеров пересмотрел и доку оракловскую читал, ничего такого не нашел (хотя может и не обратил внимания). ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 08:47 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Как-то можно настроить log4j2 так, чтобы он не записывал stacktrace на проде ? Код: java 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 08:52 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
HettТ.е. выбрасываем IOException из хендлера.скорее ты его сам подавил и выше блок с try( ничего не знал об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 08:57 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Petro123HettТ.е. выбрасываем IOException из хендлера.скорее ты его сам подавил и выше блок с try( ничего не знал об этом. Ну как бы да, но я же все ресурсы закрыл. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:00 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
HettКак-то можно настроить log4j2 так, чтобы он не записывал stacktrace на проде ? Код: java 1.
на проде свой конфиг или в конфине переменная окружения операционки. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:00 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
HettНу как бы да, но я же все ресурсы закрыл.фиг знает. Значит автомат не работает если в catch ничего нет кроме логирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:03 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Petro123HettКак-то можно настроить log4j2 так, чтобы он не записывал stacktrace на проде ? Код: java 1.
на проде свой конфиг или в конфине переменная окружения операционки. Понятно что свой. Собственно вопрос в этом и был, как в конфиге указать чтобы он стек-трейсы не валил в лог. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:04 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Hett, Конфиг не знаю, тему создай. Я бы warn поменял на info или debug. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:07 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
HettКак-то можно настроить log4j2 так, чтобы он не записывал stacktrace на проде ? Код: java 1.
а в логге была просто запись Error proxy data? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:28 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
HettЕсть такое вот поделие. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Проблема в том, что иногда выпадает исключение при попытке закрыть OutputStream Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Как я понял, проблема в том, что пока мы пишем - клиент отваливается и дописать не получается. Оно происходит редко и в общем-то никто не жаловался. Вот только сокет остается жить в таком виде до завершения работы программы: Код: plaintext 1. 2. 3. 4.
Виден он только в lsof, в netstat - отсутствует, но думаю это не важно. Естественно в конце концов упираемся в ulimit. Как правильно обработать эту ситуацию? а как часто такие запросы происходят? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:29 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
ОзверинHettКак-то можно настроить log4j2 так, чтобы он не записывал stacktrace на проде ? Код: java 1.
а в логге была просто запись Error proxy data? Ну запись и стек-трейс, я привел в первом посте это :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:43 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
автора как часто такие запросы происходят? Около 1000 в сутки на одну ноду. Как я понял просто клиент прерывает соединение до того, как получил данные, вот и вся "проблема". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 09:45 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
Озверин, Не знаю, может ли с этим быть связано - вы не закрываете InputStream - его тоже надо добавить в try() {} (в try-with-resources можно добавлять сразу несколько записей). То есть получится что-то вроде Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Ну, раз проблему уже решили, причем через другой способ работы с httpExchange, то и так гуд - видать утекали "серверные" сокеты, а не "клиентские". Тем более, что Response.close() должен по-идее закрыть и InputStream. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 18:00 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
авторТем более, что Response.close() должен по-идее закрыть и InputStream. Да, он закрывается. Я кстати пробовал и вариант с его закрытим даже сначала. Но ничего не изменилось. Стоит ли закрывать инпут стрим из чисто эстетических соображений? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 18:32 |
|
HttpServer - утечка соектов
|
|||
---|---|---|---|
#18+
HettСтоит ли закрывать инпут стрим из чисто эстетических соображений? Часто применяется правило - где "открыл/создал" ресурс - там и закрывай (на том же "уровне"). Поэтому, я бы его закрывал - раз лишних try-catch-ей это не тянет за собой. Но это реально "вкусовщина" и "эстетство" :) P.S. Оффтоп. Вообще, это правило здорово помогает. Например, при работе с JDBC ресурсами при закрытии Connection-а автоматически закрываются связанные с ним PreparedStatement-ы, ResultSet-ы и т.п. Казалось бы - закрывай только connection и всё. Но это не срабатывает при использовании пула соединений, т.к. физически соединение не закрывается, а возвращается в пул. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2018, 19:48 |
|
|
start [/forum/topic.php?fid=59&msg=39741842&tid=2121622]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 320ms |
total: | 450ms |
0 / 0 |