Базовая оптимизация производительности VDS на *nix
Этот список — не более, чем памятка: что нужно проверить на типичном VDS (Apache, PHP, MySQL) перед тем, как докупать ресурсов :). Не претендует на точность и полноту, потому как рассматриваемый предмет (оптимизация производительности), пожалуй, один из самых сложных.
VDS (или, как их ещё называют, VPS) обычно сильно ограничены в ресурсах, особенно в объёме оперативной памяти и доступного процессорного времени и, в тоже время, не дают возможности модифицировать какие-либо системные параметры, поэтому вопросы как добиться от них хорошей производительности простыми и действенными средствами как для них особенно актуальны.
Инструменты
- Статистика. Для того, чтобы объективно оценивать действенность применённых мер нужна статистика по нагрузке, потреблению памяти. Отлично, если её предоставляет провайдер в панели управления VDS, если же не предоставляет, придётся установить что-то вроде cacti или, что больше подходит для VDS более лёгкий serverstats.
- Статистика отказов в ресурсах. В зависимости от системы виртуализации называется по разному, но смысл одинаков: перечень ресурсов, которых потребовалось больше, чем выделено.
- Простые инструменты. Банально, но для полноты изложения: mod_status, top, phpmyadmin (для просмотра статистики по MySQL) и т.п.
- Эмуляция нагрузки. Если возникнет необходимость сэмулировать нагрузку, то могут понадобиться: ab, Microsoft Web Application Stress Tool или даже JMeter.
Меры по уменьшению потребления ресурсов
- Отключение ненужных сервисов. Банально, но проверить никогда не помешает.
- Запуск редко используемых сервисов через inetd. Первыми кандидатами на такой запуск будут ftp- и ssh-серверы, подразумевается, что эти серверы используются от случая к случаю.
- Отключение InnoDB в MySQL. Позволит сэкономить 80—100 Мб памяти.
- Отключение неиспользуемых модулей Apache и PHP. Уменьшает объём, занимаемый процессами Apache в памяти.
- Установка nginx для отдачи статики (картинок, скриптов, CSS). Эта мера уменьшает нагрузку на Apache, а значит основательно снижает потребление памяти его процессами.
Меры по оптимизации производительности
Здесь нам пригодятся ресурсы (главным образом оперативная память), освободившиеся после действий предыдущего этапа.
- Включение (дописывание) кеширования на уровне веб-приложения. Обычно очень действенная мера.
- Установка PHP-акселератора. Ценой кеширования уже распарсенных php-скриптов в памяти или на диске достигается значительный выигрыш в их производительности. Существует несколько вариантов, например: eAccelerator, APC.
- Включение query cache в MySQL. Эффективно, если приложение делает много повторяющихся запросов.
Клиентская оптимизация
Об этом очень хорошо уже написано на webo.in, поэтому только пару общих слов:
- Включение gzip-сжатия в самом веб-приложении, а лучше на веб-сервере (лучше в nginx, если он стоит перед Apache).
- Комбинирование, минимизация и gzip-сжатие JavaScript и CSS.
