Как диагностировать безразличный сервер

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

  • Apache HTTPD
  • Tomcat Apache
  • MySql
  • RabbitMQ

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

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

enter image description here

Вопрос

  • Как я могу отладить то, что заставляет сервер становиться безразличным?
2
задан 27 September 2014 в 16:08
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 и другие инструменты на разных экранах. Есть шпаргалки по использованию screen, поэтому я не буду здесь это описывать.

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

Вы можете дополнительно ограничить ресурсы, выделяемые каждому демону, привязав их к определенному ядру или процессору. Это можно сделать с помощью команды «набор задач». man taskset для получения дополнительных сведений о его использовании.

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

2
ответ дан 3 December 2019 в 11:41

Теги

Похожие вопросы