Чеклист по оптимизации веб-сервера на 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М

Значение стоит увеличивать по мере необходимости. Не стоит забывать, что кеш перестает работать эффективно на таблицах, которые часто обновляются.

Резюме

В качестве резюме — краткий список с выделенными наиболее важными настройками:

  • 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

Источник


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Unlix © Все права защищены 2019

Копирование материалов с сайта Unlix.ru без указания полной ссылки на источник ЗАПРЕЩЕНО!