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

Gui*_*lar 0 security centos process limits centos7

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

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

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

Gui*_*lar 5

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

[Service] 
LimitNOFILE=10000
Run Code Online (Sandbox Code Playgroud)

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