Какие тесты я должен выполнить, чтобы определить узкие места на моем сервере? Я пытаюсь оптимизировать систему, чтобы поддерживать резкие скачки нагрузки, когда они возникают. Я запускаю Ubuntu в среде LAMP.
Я бы порекомендовал сначала установить фреймворк логирования, такой как munin, чтобы у вас были данные о вашей базовой нагрузке и во время скачков на вашем сервере. Затем я бы отслеживал запросы на вашем SQL-сервере (особенно медленные запросы).
Используя эту информацию, вы уже можете определить, насколько необычны эти ситуации или они просто добавляют последний гвоздь к сильно загруженной машине и что происходит, например, у вас заканчивается оперативная память, определенные процессы время от времени забивают диск или ваш процессор - проблема.
Это очень широкий вопрос. Чтобы что-либо измерить, сначала вам понадобится базовый показатель эффективности. Установить munin
и munin-node
и оцените свой исходный уровень. collectd
и почтенный SNMP - тоже варианты, но не очень удобные для пользователя.
Подумайте о своем приложении. Это тяжелая база данных? Много ввода-вывода? CPU (кодирование видео)? Выполните некоторые обычные задачи веб-приложения и сначала посмотрите, где вообще существуют ваши узкие места. Используйте другие инструменты, например siege
, ab
, или JMeter
автоматизировать эти задачи.
После того, как вы установили некоторые базовые показатели и контрольные точки, вы сможете увидеть, что можно улучшить. Как уже говорилось, это широкий вопрос, поэтому на него можно дать довольно широкий спектр ответов:
Ограничение ввода-вывода: вы без нужды обращаетесь к базе данных? Как выглядит ваш кеш запросов? Вам нужна оптимизация для записи или чтения? Вам нужен отдельный сервер БД?
Ограничение памяти: предполагая, что вы не привязаны к вводу-выводу базы данных и имеете как можно больше памяти, ваш набор данных слишком велик для доступной памяти? Какова частота попаданий в кеш? Вы используете отдельную структуру кеширования, например memcached
?
Ограничение ЦП: может ли ваше приложение использовать преимущества нескольких ядер / рабочих? Вы страдаете от проблем с блокировкой потоков или конфликтами? Подумайте об использовании легкого веб-сервера, например nginx
вместо Apache или настройку обратного прокси. Также могут быть актуальные sysctl.conf
(ядра) параметры, которые вы можете изменить.
Связано с сетью: крайне маловероятно на данном этапе игры.
Другие моменты и соображения:
Некоторая быстрая оптимизация вашей БД может быть выполнена с помощью 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/