Высокий трафик, медленный ответ: где узкое место?

У меня есть сайт, который получает относительно высокий трафик около 250 000 просмотров в день. PHP-код обычно выполняется менее чем за 0,02 секунды, но фактическое время отклика может увеличиться в периоды пиковой нагрузки до нескольких секунд (иногда более 10 секунд). Apache запускает до 700-800 процессов, но использование памяти все еще низкое (даже не половина из 8 ГБ), нагрузка на сервер обычно также очень низкая.

Я переместил изображения и файлы ресурсов в Amazon S3, и это очень помогло. Также важно, что на сайт постоянно загружаются новые изображения (так как люди публикуют новые фотографии).

Исходя из этих подсказок, я думаю, что это может быть проблема с диском или сетью, но как и с помощью каких инструментов я могу это диагностировать?

1 ответ

Есть много вещей, которые могут быть, но начнем с наиболее вероятных вещей с сервера Apache/PHP:

  1. Память. Если Apache настроен неправильно, он израсходует всю оперативную память и начнет использовать пространство подкачки, что снизит производительность. Убедитесь, что ваше пространство подкачки не используется (или не используется много). Если это уменьшить Apache MaxClients или потребление памяти того, что еще выполняется на сервере (MySQL и т. д.). Поскольку вы говорите, что он использует только половину, это может не быть проблемой, хотя 800 процессов Apache в 4 ГБ занимают всего 5 МБ / процесс, кажется очень низким.
  2. Процессор - PHP может сильно загружать процессор, особенно в сочетании с другими приложениями / базами данных. Проверьте нагрузку на сервер и загрузку процессора в top чтобы увидеть, сколько вы используете. Используя простую программу мониторинга, такую ​​как sarили более сложный, такой как Nagios или Zabbix, может дать вам более подробную информацию о загрузке процессора с течением времени. Единственное, что вы можете здесь сделать - это установить и использовать кэш кода операции PHP, такой как APC или eAccelerator. После этого, как правило, мало что можно сделать, кроме оптимизации базы данных / приложения.
  3. IO - Проверьте вывод top а также iostat чтобы увидеть, сколько IO вы делаете. Высокий показатель wa в верхней части, либо прерывистый, либо постоянный, обычно указывает на проблему ввода-вывода. Если это проблема ввода-вывода, выясните, где она происходит (Apache, PHP, база данных, что-то еще и т. Д.), Поскольку решение в конечном итоге будет зависеть от того, что его вызывает.

Я также проверил бы различные файлы журнала на наличие очевидных сообщений об ошибках (система, Apache, база данных и т. Д.). Я знаю, что у меня были сайты с проблемами производительности только из-за того, что число дескрипторов файлов было слишком мало для большого сайта.

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