Как обеспечить более высокую производительность VPS сервера, который работает на Nginx + PHP + Mysql? В этой статье приведен чеклист основных настроек, которые позволят существенно оптимизировать работу сервера. Настройка займет не более 10 минут и не требует ничего, кроме редактирования конфигурационных файлов.
Примеры настроек приведены для операционной системы Debian 7 и VPS сервера с 1 процессором и 512Мб оперативной памяти.
Nginx
Настройки выполняются в файле /etc/nginx/nginx.conf, а также в настройках виртуального хоста (обычно в папке /etc/nginx/sites-enabled)
Количество воркеров
Количество воркеров nginx’a должно совпадать с количеством ядер:
|
|
Cache-Control заголовки
Установка заголовков Cache-Control позволит существенно разгрузить Ваш сервер от повторных обращений к файлам которые не изменяются (или изменяются редко, например css/js/jpg/png/gif):
|
|
Access log
Лишние дисковые операции из-за записи логов нам не нужны, отключаем:
|
|
Unix socket’ы
Включаем unix-сокеты для работы с PHP:
|
|
PHP
Настройки выполняются в файле конфигурации fpm php-fpm.conf, который в нашем случае находится тут /etc/php5/fpm/pool.d/www.conf.
Unix socket’ы
Убеждаемся, что php-fpm работает с unix-сокетами, а не с tcp:
|
|
APC
Устанавливаем расширение APC — внутренний кеш PHP, который позволит существенно сэкономить ресурсы парсеру PHP:
|
|
Настройка MySQL
Все настройки MySQL выполняются в файле my.cnf, который обычно находится тут /etc/my.cnf.
key_buffer
Если Вы используете только MyISAM таблицы, устанавливайте это значение в 30%…40% всей доступной оперативной памяти на сервере:
|
|
innodb_buffer_pool_size
Если Вы используете только InnoDB таблицы, устанавливайте это значение максимально возможным (80% доступной памяти). В нашем случае устанавливаем:
|
|
Внимание, устанавливать такое знание можно только значительно уменьшив ‘‘‘key_buffer’’’. Т.е. между этими двумя настройками нужно сделать выбор, который зависит от типа используемых таблиц (MyISAM либо InnoDB).
innodb_flush_log_at_trx_commit
Значительного ускорение записи для таблиц innoDB можно добиться установкой этого параметра в 0, когда буфер записи будет сбрасываться на диск не после каждой операции, а раз в секунду:
|
|
innodb_flush_method
Установка этой опции в O_DIRECT позволяет избежать двойного кеширования (она выключает операционный кеш для файлов данных MySQL):
|
|
thread_cache_size
Эта опция определяет размер кеша для созданных тредов. Подбирается экспериментально, но лучше стартовое знание увеличить до 16:
|
|
query_cache_size
Включаем внутренний кеш MySQL:
|
|
Значение стоит увеличивать по мере необходимости. Не стоит забывать, что кеш перестает работать эффективно на таблицах, которые часто обновляются.
Резюме
В качестве резюме — краткий список с выделенными наиболее важными настройками:
Nginx
- worker_processes
- expires max для статики
- access_log off
- unix-сокеты
PHP
- APC модуль
MySQL
- key_buffer
- innodb_buffer_pool_size
- innodb_flush_log_at_trx_commit = 0
- query_cache_size
- innodb_flush_method = O_DIRECT
- thread_cache_size
Источники
Приведенные статьи содержат более подробное описание данных настроек, а также дополнительные методы оптимизации серверной части.
Настройка Nginx под нагрузки
Tuning FreeBSD to serve 100-200 thousands of connections
Optimizing NGINX and PHP-fpm for high traffic sites
Оптимальная настройка MySQL
Тюнинг MySQL — thread_cache_size
Три первых шага к оптимизации LAMP