我想弄清楚 systemd 中的资源管理是如何工作的。
为了弄清楚我在哪里以及如何到达那里,我应该首先解释我的情况:
将 mysql-db 从 ubuntu 14.04 迁移到 16.04 后,我必须处理 systemd。这不是我第一次,直到今天都没问题。在 16.04 上,我注意到 mysql 启动期间的日志条目:
Changed limits: max_open_files: 1024 (requested 5000)
我发现 mysql 变量max_open_files
(max_open_files
在我当前的配置中未设置!)是动态的,取决于 4 种不同的场景(请参阅:https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_open_files_limit)就我而言,显然是没有场景。使用4。
所以我的观点是: 14.04 和 16.04 上的 mysql-config 是相同的,但看起来 systemd 的资源管理行为与 14.04 上的不同(使用ulimit
& /etc/security.d/limits.conf
) mysql 使用场景 4 的条件是,'if操作系统的限制是无限的'是真的......为什么操作系统的极限是无穷大吗?
我正在努力解决的另一件事:如果我max_open_files
在 mysql-config 中定义为“1000”并查看一下,/proc/[myslq-pid]/limits
我可以看到软限制设置为 1000,硬限制设置为 4096。
问题1:为什么限制是 4096,因为上面的条件 4 在“如果操作系统限制是无穷大”上成立...
我可以设置max_open_files
为 1 到 4096 之间的任何值,它定义了限制 - 这是预期的行为。但如果它设置高于 4096,则会回落到 softlimit=1024 和 hardlimit=4096。我不理解这种行为,因为上面的条件 4 再次满足if operating system limit is Infinity
...
这导致我的问题2:这个“默认值”从哪里来?为什么我无法将限制设置为高于 4096?
笔记:一旦我LimitNOFILE=number
在 systemd 的 mysql-service-unit 中定义,“number”就会设置为软限制和硬限制,并且我能够定义高于 4096 的值。通过/proc/[myslq-pid]/limits
再次查看确认。
我查看了 systemd 的文档,但出于某种原因,在“默认值”方面唯一提到的是/etc/systemd/system.conf
和/etc/systemd/user.conf
文件,我可以在其中定义DefaultLimitNOFILE=
,默认情况下未设置 - 那么是否有default Default
??
我真的不支持这种行为......希望有人能提供有关如何解决此问题的提示。
我接受你的任何建议或暗示!
我什至很乐意阅读更多文档来解释这一点 - 但我只是没有找到合适的文档......我发现的所有内容都让我回到systemd.资源控制,设置限制,系统执行程序和systemd/ControlGroup接口这并没有让我比在这里结束更进一步:)