Как определить узкие места в среде 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/

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