![在 CentOS/RHEL 上增加 nproc](https://linux22.com/image/622005/%E5%9C%A8%20CentOS%2FRHEL%20%E4%B8%8A%E5%A2%9E%E5%8A%A0%20nproc.png)
我遇到了一个问题,mysqld 在高负载下会耗尽线程并抛出错误。我将其追溯到一个问题,其中 pid 似乎被限制在 1024 个进程的软限制中(为了便于阅读,已删除其他限制):
[root@db1 limits.d]# cat /proc/`pidof mysqld`/limits
Limit Soft Limit Hard Limit Units
Max processes 1024 191967 processes
我在 /etc/security/limits.d/ 中有一个名为 99-mysql.conf 的文件,其中包含:
mysql soft nofile 20000
mysql hard nofile 20000
mysql soft nproc 20000
mysql hard nproc 20000
据我所知,问题出在用户启动 MySQL 时。我还没有测试过,但我认为如果 MySQL 在系统启动时由系统启动,那么它应该具有正确的限制。
有没有办法增加这个 pid 和将来的 mysqld 进程的 nproc 的软限制?
答案1
似乎您可以通过以下方式设置正在运行的 pid 的限制:
echo -n "Max processes=20000:191967" > /proc/`pidof mysqld`/limits
这解决了眼前的问题,但如果我再次重新启动 MySQL,我将需要重置限制(除非我将其添加到启动脚本中),这似乎很麻烦。
答案2
查找并删除以下项中的任何条目:
/etc/security/limits.d/90-nproc.conf
另外,在您的 limits.d 文件中添加:
root soft nofile 20000
root hard nofile 20000
root soft nproc 20000
root hard nproc 20000
这将涵盖从根提示符重新启动。