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

Как определить узкие места в среде Ubuntu LAMP

Какие тесты я должен выполнить, чтобы определить узкие места на моем сервере? Я пытаюсь оптимизировать систему, чтобы поддерживать резкие скачки нагрузки, когда они возникают. Я запускаю 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/