[Из песочницы] Чеклист по оптимизации VPS на PHP/Mysql/Nginx

Как обеспечить более высокую производительность VPS сервера, который работает на Nginx + PHP + Mysql? В этой статье приведен чеклист основных настроек, которые позволят существенно оптимизировать работу сервера. Настройка займет не более 10 минут и не требует ничего, кроме редактирования конфигурационных файлов.Примеры настроек приведены для операционной системы Debian 7 и VPS сервера с 1 процессором и 512Мб оперативной памяти.Nginx Настройки выполняются в файле /etc/nginx/nginx.conf, а также в настройках виртуального хоста (обычно в папке /etc/nginx/sites-enabled)Количество воркеров Количество воркеров nginx’a должно совпадать с количеством ядер: worker_processes 1; Cache-Control заголовки Установка заголовков Cache-Control позволит существенно разгрузить Ваш сервер от повторных обращений к файлам которые не изменяются (или изменяются редко, например css/js/jpg/png/gif): location ~* \.(css|js|png|gif|jpg)$ { expires max; } Access log Лишние дисковые операции из-за записи логов нам не нужны, отключаем: access_log off; Unix socket’ы Включаем unix-сокеты для работы с PHP: location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; # также необходимо настроить php-fpm, см. ниже fastcgi_index index.php; include fastcgi_params; } PHP Настройки выполняются в файле конфигурации fpm php-fpm.conf, который в нашем случае находится тут /etc/php5/fpm/pool.d/www.conf.Unix socket’ы Убеждаемся, что php-fpm работает с unix-сокетами, а не с tcp: listen = /var/run/php5-fpm.sock APC Устанавливаем расширение APC — внутренний кеш PHP, который позволит существенно сэкономить ресурсы парсеру PHP: apt-get install php-apc Настройка MySQL Все настройки MySQL выполняются в файле my.cnf, который обычно находится тут /etc/my.cnf.key_buffer Если Вы используете только MyISAM таблицы, устанавливайте это значение в 30%…40% всей доступной оперативной памяти на сервере: key_buffer = 128M innodb_buffer_pool_size Если Вы используете только InnoDB таблицы, устанавливайте это значение максимально возможным (80% доступной памяти). В нашем случае устанавливаем: innodb_buffer_pool_size = 350M Внимание, устанавливать такое знание можно только значительно уменьшив '''key_buffer'''. Т.е. между этими двумя настройками нужно сделать выбор, который зависит от типа используемых таблиц (MyISAM либо InnoDB).

innodb_flush_log_at_trx_commit Значительного ускорение записи для таблиц innoDB можно добиться установкой этого параметра в 0, когда буфер записи будет сбрасываться на диск не после каждой операции, а раз в секунду: innodb_flush_log_at_trx_commit = 0 innodb_flush_method Установка этой опции в O_DIRECT позволяет избежать двойного кеширования (она выключает операционный кеш для файлов данных MySQL): innodb_flush_method = O_DIRECT thread_cache_size Эта опция определяет размер кеша для созданных тредов. Подбирается экспериментально, но лучше стартовое знание увеличить до 16: thread_cache_size = 16 query_cache_size Включаем внутренний кеш MySQL: query_cache_size = 16М Значение стоит увеличивать по мере необходимости. Не стоит забывать, что кеш перестает работать эффективно на таблицах, которые часто обновляются.

Резюме В качестве резюме — краткий список с выделенными наиболее важными настройками: Nginxworker_processes expires max для статики access_log off unix-сокеты PHPAPC модуль MySQLkey_buffer innodb_buffer_pool_size innodb_flush_log_at_trx_commit = 0 query_cache_size innodb_flush_method = O_DIRECT thread_cache_size Источники Приведенные статьи содержат более подробное описание данных настроек, а также дополнительные методы оптимизации серверной части.

© Habrahabr.ru