Как определить узкие места в среде Ubuntu LAMP
Какие тесты я должен выполнить, чтобы определить узкие места на моем сервере? Я пытаюсь оптимизировать, чтобы выдерживать пики большой нагрузки, когда они возникают. Я использую Ubuntu в среде LAMP.
3 ответа
Я бы рекомендовал сначала установить каркас журналирования, такой как munin, чтобы у вас были некоторые данные о вашей базовой нагрузке и во время пиков на вашем сервере. Затем я бы отслеживал запросы на вашем сервере SQL (особенно медленные запросы).
Используя эту информацию, вы уже можете определить, насколько необычны эти ситуации или они просто добавляют последний гвоздь к высоконагруженной машине и что происходит, например, когда у вас заканчивается ОЗУ, определенные процессы время от времени забивают диск, или Ваш процессор является проблемой.
Это очень широкий вопрос. Чтобы что-то измерить, сначала вам нужен базовый показатель эффективности. устанавливать munin
а также munin-node
и оцените свой базовый уровень. collectd
и почтенный SNMP также варианты, но не очень удобный для пользователя.
Подумайте о своем заявлении. Является ли это базой данных? Много IO? CPU (кодирование видео)? Сначала выполните обычные задачи веб-приложений и посмотрите, где вообще существуют ваши узкие места. Используйте другие инструменты, такие как siege
, ab
, или же JMeter
автоматизировать эти задачи.
После того, как вы установили некоторые базовые метрики и контрольные точки, вы можете увидеть, где можно улучшить. Как уже говорилось, это широкий вопрос, и поэтому он имеет довольно широкий спектр ответов:
Привязка ввода / вывода: вы попали в базу данных без необходимости? Как выглядит ваш кеш запросов? Вам нужно оптимизировать для записи или чтения? Вам нужен отдельный сервер БД?
Ограничение памяти: если вы не связаны с базой данных ввода-вывода и имеете столько памяти, сколько можете, слишком ли велик ваш набор данных для доступной памяти? Какова частота попаданий в кеш? Используете ли вы отдельную структуру кэша, как
memcached
?Процессор привязан: может ли ваше приложение использовать преимущества нескольких ядер / рабочих? Вы страдаете от блокировки потока или проблем конкуренции? Рассмотрите возможность использования легкого веб-сервера, такого как
nginx
вместо Apache или настройки обратного прокси. Там также могут быть актуальныsysctl.conf
(ядро) параметры вы можете изменить.Связанная сеть: крайне маловероятно на данном этапе игры.
Другие моменты и соображения:
Немного быстрой оптимизации вашей БД можно выполнить с помощью http://mysqltuner.pl/.
Попробуйте максимально точно смоделировать реальный трафик (хорошее начало - воспроизведение журналов доступа).
Если вы когда-нибудь попадете в область подкачки на диске в настройке производственной БД, вас ждет мир боли.
tl; dr График все, что вы считаете актуальным, сильно ударить по вашему серверу, настроить, повторить.
Что я нашел лучше всего, это выполнить анализ емкости перед развертыванием. Тем не менее, есть действительно отличная статья о том, что вы ищете, я надеюсь, что это поможет.
http://blog.inarow.net/post/227533559/four-steps-to-diagnose-your-lamp-application
1) Отслеживание запросов MySQL, занимающих секунду 2) Отслеживание использования памяти PHP и регистрация времени доставки Apache 3) Регистрация ошибок PHP 4) Создание снимков на уровне операционной системы
Я также хотел бы добавить JMeter в это. http://jakarta.apache.org/jmeter/