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

Как узнать, здоров ли мой nginx?

Я запускаю nginx на EC2 (m1.small) для завершения SSL.

Я использую 2 рабочих на Ubuntu, с последней версией nginx (стабильной), пропускная способность сети около 2 Мбит / с и средняя загрузка системы около 2 к 3.

Мне интересно, здорова ли сейчас эта система,

например

  1. какова длина очереди (я знаю, что nginx может обрабатывать много одновременных запросов, но я имею в виду, что до того, как запрос будет обработан, сколько из них нужно подождать, прежде чем их обслужат)
  2. каково среднее время ожидания в очереди для обслуживания данного запроса.

Я хочу знать, потому что если мой nginx ЦП ограничен (например, из-за SSL) мне нужно будет перейти на более быстрый экземпляр.

Мой текущий статус nginx

Active connections: 4076 
server accepts handled requests
 90664283 90664283 104117012 
Reading: 525 Writing: 81 Waiting: 3470 

Чтобы проверить тяжелые процессы ввода-вывода, попробуйте установить iotop:

apt-get install iotop

Это требует поддержки учета ввода-вывода внутри ядра, которое присутствует в Ubuntu 10.04 или выше.

Если вы обнаружите, что nginx привязан к вводу-выводу, попробуйте проверить, действительно ли вам нужно вести журнал доступа (что может быть узким местом при таком большом количестве запросов). Отключить журнал доступа очень просто:

access_log /dev/null crit;

К вашему сведению

access_log off;

не будет (nginx запишет в файл с именем off).

если ты необходимость ведение журнала, реализуйте политику доставки (например, logrotate журналов один раз в день и отправьте повернутые журналы в удаленное место через rsync, scp или иначе) и попробуйте записать в хранилище экземпляров (по умолчанию смонтировано в / mnt). Хранилище экземпляров поддерживается локальными дисками сервера, которые могут быть быстрее (хотя это не гарантируется), но их данные теряются при завершении работы экземпляра, отсюда и необходимость в политике доставки журналов.

Настроить nginx плагин статуса и установка собирать для сбора данных о производительности системы. Это очень легкий демон с точки зрения необходимых ему системных ресурсов. Есть плагин для мониторинга nginx: Плагин: nginx и конечно collectd может отслеживать все данные о производительности системы.

Так далеко как collectd является просто сборщиком данных о производительности (хранит их в БД RRD), необходим инструмент для отображения данных. Мне довольно комфортно с CGP... версия git в порядке. CGP это приложение PHP, поэтому оно съест ваш процессор только тогда, когда вы посмотрите на графики.

Пример графика: Nginx_connections_and_requests.png

Кстати, Amazon EC всегда был значительно медленнее, чем другие, и в первую очередь для хранения. Это могло быть причиной более высокой нагрузки.

Не совсем отвечаю на вопрос, но ...

Проблема с небольшими инстансами EC2 заключается в том, что у вас нет 100% доступного процессорного времени, только пакеты. Как только ваш экземпляр начинает постоянно загружать ЦП, он блокируется.

В идеале вы не должны достигать нагрузок> 2,0. Поскольку небольшие экземпляры имеют только один ЦП, любая загрузка выше 1.0 означает, что у вас уже есть половина ваших процессов, ожидающих доступных фрагментов ЦП. Среднего экземпляра должно хватить.

Хорошая статья, объясняющая, как измерить нагрузку на систему: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages

Поскольку вы используете ec2 small, который имеет только 1 вычислительный блок, loadavg 2 ~ 3 слишком велик. Системные показатели предоставят много больше полезной информации, чем та, которую вы предоставили из nginx. Скорее, эти показатели совсем не помогают ...

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

https://serverfault.com/search?q=load+average

Как узнать, здоров ли мой nginx?

Проверьте системные метрики, чтобы увидеть, не возникает ли у вас узких мест в производительности и если да; определить, где это.

2 Мбит / с - это определенно медленно для m1.small. Я получил значительно больше от своих экземпляров t1.micro. Проверьте iotop и htop, чтобы узнать, что делает ваша система. Похоже, что где-то в вашем процессе есть неприятное узкое место. Также могут помочь показатели CloudWatch для этого экземпляра и его объемы.

Если вы используете динамические страницы (PHP, Perl, Ruby), может быть неоптимизированный код, который вызывает замедление.

Если вы не видите узких мест ЦП или ввода-вывода на хосте, проблема может быть на другом уровне, если у вас есть другие системы в стеке.

Одна вещь, которую следует учитывать, - это использование ELB для завершения SSL (и балансировки нагрузки тоже) для распределения нагрузки. Они не слишком дороги и могут разгрузить достаточно (при условии, что виноват SSL), чтобы повысить производительность, дешевле, чем увеличение размера инстанса. Отключение вашего сайта от ELB также даст вам больше гибкости в том, как масштабировать сайт и управлять им.

Если ваш топ показывает, что nginx - единственный процесс, потребляющий CPU, а тип вашего экземпляра - m1.small, это наверняка означает, что nginx находится в состоянии BAD. Обязательно отключите сжатие gzip, а также я предлагаю добавить патч SPDY http://nginx.org/patches/spdy/README.txt (Firefox и Chrome поддерживают SPDY), что значительно увеличит время загрузки страниц SSL.