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

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

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

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

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

Это может быть многое, но начнем с наиболее вероятных с сервера Apache / PHP:

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

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