Назад | Перейти на главную страницу

SSH не отвечает после остановки Tomcat, много использования ЦП ksoftirqd

У меня странная проблема. Каждый раз, когда я останавливаю Tomcat, SSH становится очень медленным, почти полностью не отвечает. SSH может принять любую команду за минуту или даже больше. Когда я, наконец, снова запустил Tomcat, все вернется в норму.

Это происходит на очень загруженном сервере. Проблема в том, что мне нужно часто останавливать Tomcat из-за обновлений приложения. Обычно обновление занимает несколько секунд, но здесь это занимает почти 10 минут, и из-за этого мы испытываем нежелательные простои.

Одна вещь, которую я вижу, это когда я останавливаю Tomcat top показывает много ksoftirqd/X процессы на 100% ЦП. Может в этом проблема?

Версия ядра: 2.6.18-308.11.1.el5

Версия Red Hat: Red Hat Enterprise Linux Server release 5.9 (Tikanga)

Есть идеи, почему это происходит?

Медленное соединение ssh / задержка ssh - признак высокой нагрузки. Высокая нагрузка часто вызывается блокировкой io, которая часто вызывается свопингом.

чтобы проверить свою нагрузку, беги uptime или top вы, вероятно, увидите номера загрузки более 10, когда ssh не отвечает. Они, вероятно, будут зависать ниже 2 при нормальном использовании.

бегать free или top чтобы увидеть использование памяти, вы, вероятно, увидите много подкачки.

Как только вы обнаружите основные симптомы, вы можете искать причину «подкачки tomcat при выключении» или «высокая нагрузка tomcat», что, вероятно, связано с тем, что он пытается записать некоторые вещи, хранящиеся в кеше, или подкачать на диск. Ваш максимальный размер кучи tomcat jvm больше, чем объем памяти, который у вас есть?

Возможно, что-то, подключенное к вашему веб-приложению, постоянно повторяет попытку, когда оно выходит из строя, создавая сценарий DoS.

Все это может быть специфическим для вашего веб-приложения, поэтому используйте общие термины.

Я знаю, что это не лучшая практика, но я бы посоветовал вам сбросить tomcat удаленно через ssh и установить для выходов значение null:

ssh your_server '/etc/init.d/tomcat restart > /dev/null 2>&1'

(Вы можете заменить приведенную выше команду эквивалентом, который вы используете для перезапуска tomcat).

Это обходной путь, а не решение. Не могли бы вы попробовать это при подключении к другому сеансу ssh и проверить, возникает ли проблема и влияет ли она на все сеансы?