|
|
|
jetty, EndPoint и потоки
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть SOAP-сервис (jetty 9.2.1.v20140609, javax.xml.ws.Endpoint). Его дёргают из другого приложения. Хорошо дёргают. В некоторый момент он начинает сыпать сообщениями, что не может создать поток для ответа. Код: sql 1. 2. 3. 4. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. При этом не падает (т.е. даже дампа нет). Подсоединится к нему не могу . В этот момент процесс отжирает 8Гб (из 16). При этом все запросы логируются и они выполняются на другой машинке спокойно, занимая не более 300Мб (т.е. утечек нет). Есть подозрение, что клиент некорректно выполняет SOAP запрос, не закрывая его (или закрывая, но через несколько минут). В результате чего у сервера заканчивается память (ответы большие, по несколько килобайт, а то и десятков). Вот вопросы. 1. Возможен ли такой сценарий? 2. Если клиент не поправят, то что можно сделать нам? Дать больше памяти на сишный хип? Как? 3. А то может просто jetty обновить? 9.2.11 уже... Точнее обновлю, раз уж заглянул, вопрос в том, поможет ли. Сервер живёт 3 дня где-то, и каждое падение- куча нервов... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. -- Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2015, 16:29 |
|
||
|
jetty, EndPoint и потоки
|
|||
|---|---|---|---|
|
#18+
Ошибка java.lang.OutOfMemoryError: unable to create new native thread совсем не обязательно связана с памятью. На сколько я знаю, существует две распространенные причины: 1) Нехватка нативной памяти. Процесс на уровне ОС ограничен в использовании памяти. Большую часть отожрала куча. Но стэк потока не находится в куче. Он создаётся вне кучи. Возможно нативная память уже забита, и как результат - ошибка. 2) Лимиты пользователя - достаточно стандартная фишка в linux - уперлись в какой-нибудь ulimit и больше процессов (которые в линухе и являются потоками) пользователь создать не может. Дамп потоков легко снимается из командной строки. Можно в него посмотреть чтобы определиться с вопросом, а не слишком ли много вышло потоков. Дамп кучи, по идее, тоже можно создать из командной строки, а потом скопировать на локальную машину для анализа. Но куча там не основная проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2015, 16:41 |
|
||
|
jetty, EndPoint и потоки
|
|||
|---|---|---|---|
|
#18+
В общем- не в этом дело оказалось. Логирования добавил- тормоза внезапно возникают в dbcp2+oracle Т.е. запросы туда уходят, а результата нет вообще. Ну и потоки копятся, для новых запросов. При этом пытаюсь поставить таймаут- и никак. Т.е. DataSource создаю так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. Потом получаю коннект Код: java 1. 2. При этом в отладке видно, что у con стоит нужный defaultQueryTimeout, но даже если дополнительно пишу ps.setQueryTimeout(queryTimeout); всё одно- запросы не обрубаются. Как сделать так, чтобы слишком длинные запросы (где тормоза- я не знаю, у меня не появляются) обрубались? Или через дочерний поток делать, а если долго- жёстко отрубать его? Кстати, как это правильно делать, т.е. чтобы через 10 секунд дочерний поток убивался 100% с освобождением ресурсов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 12:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38928303&tid=2125587]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 329ms |

| 0 / 0 |
