У меня странная проблема. Каждый раз, когда я останавливаю 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 и проверить, возникает ли проблема и влияет ли она на все сеансы?