sysctl 和 systemd

2019-07-26 10:49:08 +08:00
 jasonyang9

Linux 中,系统参数是由 sysctl,或用/proc/sys/虚拟文件系统来控制的,但在有 systemd 的情况下,又不完全是这样。

有时 systemd 会覆盖 sysctl 的设定,比如 ulimit。

网上搜 ulimit,大部分资料对 systemd 只字不提,只讲从 kernel,PAM 和 SHELL 这 3 个地方可以控制;

但如果用了 systemd,对它管理的服务单元,必须创建xxxx.servic.d/目录,在其中保存.conf,内容包括:

[Service]
LimitNOFILE=MMMMMM:NNNNNN

才行。

所以我的问题是:有没有啥资料可以把这 2 个冤家的关系讲清楚的?

4143 次点击
所在节点    Linux
6 条回复
julyclyde
2019-07-26 12:49:13 +08:00
首先,ulimit 不是 sysctl
julyclyde
2019-07-26 12:50:37 +08:00
你现在的认识是一种很经典的错误

pam_limits.so 和 shell 的 ulimit 命令,控制的是 shell 的 rlimit
而系统服务 *不应该* 在 shell 里启动,而应该是独立做好准备工作的
rogwan
2019-07-26 13:04:22 +08:00
systemd 确实强,如果不摸索清楚就用,都知不到它到底是怎么控制的,容易掉坑,这也是部分人批评 systemd 过于复杂的原因,违背 Linux 的“ stupid ”原则。
Sasasu
2019-07-26 13:19:37 +08:00
systemd 控制的是 cgroup,不是整个系统的 ulimit
regist
2019-07-26 13:26:12 +08:00
/etc/systemd/system.conf
/etc/systemd/user.conf
这是全局
你也可以直接在各个服务的 unit files 中添加参数
asilin
2019-08-19 10:20:02 +08:00
sysctl 是控制内核参数的,和下面的都没有关系。


systemd 是用来管理系统服务的(还有硬盘挂载、定时任务、会话管理等其他功能)
pam 是用来控制用户会话的,包括用户的资源限制,也就是这里的 ulimit 的,还有变量控制、密码认证等

systemd 并不会用到 pam 的 env、limits 等模块,所以平时用来控制资源的 /etc/security/limits.conf,控制环境变量的 /etc/environment 等文件,对于 systemd 的服务并不起作用

不过 systemd 会通过 pam_systemd.so 模块将 PAM 中的会话注册到 user.slice 中并进行相应的操作,
还有就是将会话中的进程放置到当前会话的 CGroup 控制组中,实现会话资源的统一管理

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/586351

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX