Tomcat запускает и использует весь доступный процессор

Tomcat (8.0.14-1+deb8u1) на производственном сервере неожиданно загружает весь процессор, что можно сделать для диагностики причины? Я знаю, что профилировщик может пригодиться, но не в производственной среде, есть идеи?

Дополнительная информация: выполнение верхней команды / lsb_release

2 ответа

Решение

@Gonzalo Я видел, что вы предоставили почти всю необходимую информацию, но я напишу свой ответ с самого начала, поэтому он может оказаться полезным для менее опытных пользователей, которые наткнулись на него.

  1. Вы должны взять дамп потока. Вы можете сделать это одним из следующих способов:

    • убить -3 PID
    • jstack -F PID
  2. Взгляни на top или же htop вывод команды.

    • За top нажмите "Shift + H", чтобы показать темы (Вы также можете начать сверху с top -p PID отфильтровывать нерелевантные процессы)
    • Найдите, какой поток потребляет процессор и запишите идентификатор потока
    • Идентификатор потока указывается в десятичном формате, поэтому его необходимо преобразовать в шестнадцатеричный.
  3. Откройте дамп потока и найдите шестнадцатеричный поток. Это поток, который потребляет процессор

PS: Ваш дамп потока выглядит действительно странно и пропускает идентификаторы потоков. Стеки потоков должны начинаться так:

"Finalizer" daemon prio=8 tid=0x02b3d000 nid=0x898 in Object.wait() [0x02d0f000]
...stack traces here...

где nid это шестнадцатеричный идентификатор потока, который вы нашли из top/htop.

Попробуйте взять дамп с kill -3

У нас та же проблема на нескольких наших серверах. проблема также возникает на серверах tomcat без веб-приложений, просто обслуживающих статические страницы. загрузка процессора неожиданно увеличивается до 200% и никогда не снижается

эта проблема никогда не появлялась до нашего недавнего обновления до 8.0.14 и 8_u_121

настроить следующим образом:

  • Debian 8.1, последние исправления
  • кот 8.0.14
  • oracle jvm 8_u_121 (последний на эту дату)
  • оперативная память 2,4 и 8 ГБ (в зависимости от серверов)
  • Разъем http/1.1 на 80 перенаправлен на 443; соединитель nio1 на 443 с https (фактически на 8080 и 8443, межсетевой экран сопоставляет 80 на 8080 и 443 на 8443)

При возникновении проблемы симптомы следующие:

  • Использование процессора 200% процессом "Java", не сводится
  • нормальный расход
  • нет записи журнала в apps.log
  • около 20 записей в catalina.out следующим образом:

30-Jan-2017 10: 15: 38.479 INFO [http-nio-8080-exec-16] org.apache.coyote.http11.AbstractHttp11Processor.process Ошибка синтаксического анализа заголовка HTTP-запроса Примечание. В дальнейшем будут регистрироваться ошибки синтаксического анализа заголовка HTTP. на уровне отладки. 30-Jan-2017 10:15:40.022 INFO [http-nio-8080-exec-17] org.apache.coyote.http11.AbstractHttp11Processor.process Ошибка синтаксического анализа заголовка HTTP-запроса Примечание: в дальнейшем будут регистрироваться другие ошибки синтаксического анализа заголовка HTTP. на уровне отладки. 30-Jan-2017 10:15:41.574 INFO [http-nio-8080-exec-18] org.apache.coyote.http11.AbstractHttp11Processor.process Ошибка анализа заголовка HTTP-запроса

у нас были похожие сообщения об ошибках в catalina.out при обновлении до 8.0.14. Это произошло потому, что этот выпуск больше не принимал unesceded {и} в URL. Мы исправили это, изменив наш клиентский код для кодирования этих символов в%4B и%4D. В то время не было проблем с процессором

Другие вопросы по тегам