Оптимизация nginx+php-fpm+mysql

Речь пойдет о оптимизации нашего сервера под высокую нагрузку.

Итак, для начала надо увеличить кеш для mysql, иначе он будет часто вылетать с cant-connect с 11 ошибкой, что означает невозможность блокировки сокета:

my.cnf

skip-locking
wait_timeout=60
connect_timeout=10
interactive_timeout=120
join_buffer_size=1M
query_cache_size=128M
query_cache_limit=2M
max_allowed_packet=16M
table_cache=1024
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=4M
key_buffer = 256M
key_buffer_size=64M
myisam_sort_buffer_size = 8M
max_connections = 10000
open_files_limit = 100000
thread_cache_size = 1024M

Также в мускуле желательно выполнить sql-запрос:

set global max_connections = 500;

Дальше, чтобы при дофига открытых файлах ничего не зависало, ожидая, пока дадут доступ на юзанье тех или и иных файлов:
/etc/security/limits.conf

* soft nofile 65525
* hard nofile 100000
nginx hard nofile 10240

Юзер nginx – это nginx, а nofile – количество открываемых файлов.

Дальше, надо в целом увеличить лимиты в системе:

/etc/sysctl.conf

kern.ipc.nmbclusters=65536
kern.ipc.somaxconn=32768
kern.ipc.maxsockets=204800
kern.maxfiles=256000
kern.maxfilesperproc=230400

Дальше лезем в конфиг nginx:

worker_processes 8;
worker_rlimit_nofile 51200;
worker_priority -5;
events {
worker_connections 4096;
use epoll;
}

Дальше лезем в конфиг php-fpm:

max_requests 4096
max_children 100

Редактируем /etc/pam.d/login, добавив строку:

session required /lib/security/pam_limits.so

Следующая команда увеличит лимит до 65535:

echo 65535 > /proc/sys/fs/file-max


Понравилась статья? Поделись с остальными.

Комментарии закрыты.