Базовая оптимизация производительности VDS на *nix

21.11.2009 9:58 / Артём Волк / 3137 просмотров / ...

Этот список — не более, чем памятка: что нужно проверить на типичном 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.