Назад | Перейти на главную страницу

MariaDB открывает множество файлов, что приводит к сбою PHP-FPM

Есть проблема, с которой я сталкиваюсь, что при известном трафике (например, при достижении 300 одновременных пользователей) сервер не обрабатывает больше входящих запросов из-за open files. Это текущий предел:

$ cat /etc/security/limits.conf
* - nofile 1000000

Ошибка видна изнутри php-fpm файл error.log:

[16-Aug-2019 02:14:12] WARNING: [pool ****] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 99 idle, and 506 total children
[16-Aug-2019 02:14:12] ERROR: failed to prepare the stderr pipe: Too many open files (24)

В данный момент nginx отвечает 499 код состояния.

Я вижу, что когда нет запросов mysqld имеет такое количество открытых файлов (число по умолчанию?):

$ lsof | grep '^mysqld' | wc -l
104104

Под нагрузкой он увеличивается до числа, например 603035 а затем эти ошибки из php-fpm курок.

Сервер не достигает 10% загрузки ЦП, и большая часть оперативной памяти свободна. Как я могу избежать такого количества открытых файлов или, если это невозможно, что следует делать и исследовать в этой ситуации?

Больше информации:

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 385941
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1000000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited