Как устранить неполадки не отвечающего сервера

Я тестирую производительность моего веб-приложения на основе Java (Grails), которое развернуто на Tomcat. На сервере работают следующие службы:

  • Apache HTTPD
  • Apache Tomcat
  • MySql
  • RabbitMQ

Хотя я понимаю, что в идеальном мире эти службы будут работать на трех отдельных серверах, я просто хочу посмотреть, как мое приложение ведет себя при некоторой нагрузке. Я обнаружил, что работает 20 темы с периодом нарастания более 40 секунд кажется, что сервер не отвечает. Тем не менее, я не могу точно определить, что именно заставляет сервер перестать отвечать на запросы.

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

введите описание изображения здесь

Вопрос

  • Как я могу отладить то, что заставляет сервер перестать отвечать на запросы?

1 ответ

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

Обязательно сделайте резервную копию любых файлов конфигурации перед их редактированием.

Вы можете получить некоторые подсказки о поведении ОС непосредственно перед сбоем, посмотрев данные sar.

sar -A | more

Обязательно ищите подъем в памяти или использовании процессора. Вы можете чаще запускать sar, отредактировав /etc/cron.d/sysstat, предполагая, что он установлен и включен.

Для каждой учетной записи службы, под которой работают ваши процессы, вы можете добавить следующее в /etc/security/limits.conf в конце файла.

apache      soft    priority    19
apache      hard    priority    19
rabbitmq    soft    priority    18
rabbitmq    hard    priority    18
mysql       soft    priority    10
mysql       hard    priority    10

Затем в каждом из сценариев инициализации для ваших демонов сократите выделенное для них время процессора и ввода-вывода.

cp -p /etc/rc.d/init.d/some_init_script ~/`date '+%Y%m%d.%H%M'`.some_init_script
vi /etc/rc.d/init.d/some_init_script

Добавьте следующее во второй строке скрипта, чтобы сократить временные интервалы ЦП и ввода-вывода:

renice 19 -p $$ > /dev/null 2>&1
ionice -c3 -p $$ > /dev/null 2>&1

Перезапустите каждый из ваших сервисов.

Давайте предположим, что sshd по-прежнему перестает отвечать на запросы. Если вы устанавливаете "screen", то вы можете запускать vmstat, iotop и другие инструменты на разных экранах. При использовании экрана есть шпаргалки, поэтому я не буду здесь это обсуждать.

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

Вы можете дополнительно ограничить ресурсы, выделяемые каждому демону, прикрепив их к определенному ядру или ЦП. Это можно сделать с помощью команды "taskset". Man Taskset для более подробной информации о его использовании.

[править] Я также должен добавить, что это не поможет при определенных условиях спин-блокировки. Если вышеперечисленное не помогает, возможно, вам придется запускать приложения на виртуальной машине и использовать ядро ​​отладки или другие средства отладки.

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