正文
Systemd设置ulimit的方式与方法
摘要
Linux安装完成之后前面几件事情一般是处理selinux 以及处理ulimit
其实处理文件打开数有多种方法,之前也总结过, 但是最近因为systemd部署的服务问题
有一些疑惑 所以想着一起进行一下总结
ulimit持久化参数的设置
一般处理ulimit可以修改配置文件
vim /etc/security/limit.conf
可以增加上如下信息
* hard nofile 65536
* hard nproc 65536
* soft nofile 65536
* soft nproc 65536
# 需要注意: * 代表任意用户, 这样其实会扩大非特权用户的打开文件数.
如果确定是那些用户,可以讲用户名替换到 * 上面来.
# 注意修改完最后是重启一下机器
ulimit临时处理
如果有时候无法重启服务 可以使用如下命令进行处理
ulimit -HSn 65536
或者是
ulimit -HSn unlimited
也可以,
如果实在不想重启服务器进行处理
可以在程序启动脚本的最前方增加上这条命令也可以实现扩展的效果.
Systemd服务时的处理.
很多时候可以将产品作为 systemd控制的服务来运行.
此时需要编写 service文件
但是经常会发现
service 方式运行的环境不受ulimit 命令的参数结果来处理.
这种情况下有两种方式进行优化:
1. 修改全局配置文件.
2. 修改单独一个服务的配置文件.
Systemd全局服务处理
/etc/systemd/user.conf
增加: DefaultLimitNOFILE=1048576
/etc/systemd/system.conf
增加: DefaultLimitNOFILE=2097152
也可以在配置文件的 .d 目录下增加配置文件
/etc/systemd/system.conf.d/limits.conf
[Manager]
DefaultLimitNOFILE=1048576:2097152
DefaultLimitNPROC=262144:524288
然后执行 systemctl daemon-reload 就可以刷新生效
这种方式学习自:
https://unix.stackexchange.com/questions/366352/etc-security-limits-conf-not-applied/370652#370652
修改单独服务的配置文件.
有时候没有权限修改,或者是不想修改影响过大
可以单独修改一个微服务的设置:
# 需要在 Service下面添加设置
[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535
然后执行
systemctl daemon-reload
执行
systemctl restart someapp
就可以了.
总体建议
修改systemd服务时建议同步修改 security的配置文件
避免两者去最小值导致环境运行异常.