已配置但未应用于守护进程的限制

已配置但未应用于守护进程的限制

在我的 CentOS 7 上,我使用它cat /proc/<pid>/limits来查看实际限制设置。我确认此方法在这里完全准确,因为我在 MySQL 上使用它,它无法转储包含 >8000 个表的特定数据库。如果prlimit我将其设置为 10000,则转储成功完成。

现在,我想避免使用 prlimit,因此我配置了 /etc/security/limits.conf 文件以满足我的需求,如果我以相应的用户(mysql)运行 bash,则运行时我可以看到正确的限制值配置ulimit -a

问题是,mysql 用户运行的进程 mysqld 仍设置为默认值(此处为 1024),这导致转储数据库时失败。我唯一的解决方案是在运行时运行 prlimit,但我想了解缺少什么,以便我的进程在启动时遵守限制配置。

答案1

最终发现问题:限制由 Systemd 处理,我必须创建文件 /etc/systemd/system/mariadb.service.d/limits.conf,内容如下:

[Service] 
LimitNOFILE=10000

因此,要记住的主要事情是:systemd 根本不关心 /etc/security/limits* 文件。

相关内容