MariaDB 打开大量文件导致 PHP-FPM 失败

MariaDB 打开大量文件导致 PHP-FPM 失败

我正在处理一个问题,在已知流量(例如达到 300 个并发用户)下,服务器由于 而无法处理更多传入请求open files。这是当前的限制:

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

php-fpmerror.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)

此时nginx499状态代码进行响应。

我可以看到,当没有发出任何请求时,mysqld打开的文件数为以下数量(默认数量?):

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

当负载达到一定程度时,它会上升到一个数字603035,然后触发那些错误php-fpm

服务器的 CPU 负载未达到 10%,并且大多数 RAM 都是空闲的。我该如何避免打开这么多文件,或者如果不可能,在这种情况下应该做什么和调查什么?

更多信息:

$ 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

相关内容