我想分享以下的想法,并理解这是否是限制systemctl服务比通常更多地消耗内存的正确方法
例如,假设我们希望限制某些服务,使其不吃超过2G内存的东西
那麽我的建议是做以下工作:
[Service]
MemoryAccounting=yes
MemoryCurrent=2097152
MemoryLimit=2097152 现在最大的问题是,当服务达到2G时,会发生什么?
有一些选择,如
但是,我们当然希望当内存消耗达到2G时,服务将重新启动。
参考资料-
https://access.redhat.com/documentation/en-us/red_帽子_企业_linux/7/html/resource_管理_指南/秒-修改_控制_群组
https://access.redhat.com/documentation/en-us/red_帽子_企业_linux/7/html/resource_管理_指南/秒-修改_控制_群组
https://superuser.com/questions/1761261/redhat-machine-rsyslogd-eating-up-10-gb
发布于 2023-01-06 05:56:38
Systemd使用Cgroup来实现资源约束,因此如果您的服务试图超过2GB内存,Cgroup将为您关闭它。如果您想确保它重新启动,请添加Restart=on-failure或Restart=on-abort (可能还有StartLimitIntervalSec)。
MemoryMax=bytes ...这控制
memory.max控件组属性。
请注意,在编写此答案时,systemd已经是252,MemoryLimit已被废弃(它是cgroup v1选项),因此它不在文档页上。
来自cgroup v2文档 on memory.max:
如果一个cgroup的内存使用量达到这个限制,并且无法减少,则在cgroup中调用OOM杀手。
https://unix.stackexchange.com/questions/730727
复制相似问题