如何在 CentOS/RHEL 7 和 8 中使用 Systemd 为进程设置资源限制

某些特定的应用程序或者进程可能需要比 systemd 默认分配的值更高的资源值。
可以覆盖 systemd 分配的默认资源限制。

基本上,systemd 会在启动时为任何进程设置默认限制。
例如:

# cat /proc/1696/limits | grep "Max locked memory"
Max locked memory         65536                65536                bytes

从上面的例子来看,PID 1696 的 Max Locked memory 是 64K,对于某些进程或者应用程序,这可能还不够。
有几种方法可以改变这种情况。

方法 1 - 全局更改

全局更改默认值,这将对所有进程生效。
编辑文件 /etc/systemd/system.conf 并更改那里的值。

  1. 如果选中,默认情况下该值将被注释掉,因此默认 64K 有效。
# cat /etc/systemd/system.conf | grep DefaultLimitMEMLOCK
#DefaultLimitMEMLOCK=
  1. 要更改此设置,请编辑文件并取消注释所需资源行并添加所需值。
    例如。
# vi /etc/systemd/system.conf
DefaultLimitMEMLOCK=128000

这将在启动时将“所有”进程的最大锁定内存更改为 128K。

更多: zhilu jiaocheng

方法 2 - 更改特定服务或者流程

如果需要更改任何特定进程或者应用程序的资源限制,则以下方法将有所帮助。

  1. 更改任何特定进程/服务的资源值。

这可以通过编辑服务单元文件并在服务部分添加限制细节来完成。
服务“test”的示例如下

# vi test.service
[Unit]
Description=TEST SERVICE
Wants=network.target network-online.target autofs.service
After=network.target network-online.target autofs.service
[Service]
Type=simple
User=farmer
ExecStart=/path/to/service/executable <<Options>>
LimitMEMLOCK=128000
PIDFile=/var/run/test.pid
[Install]
WantedBy=multi-user.target

有了上面的服务单元文件,新的一行“LimitMEMLOCK=128000”会在启动时为特定进程分配128K Max Locked Memory。
所有其他进程将具有根据 systemd 的默认值。

日期:2020-09-17 00:12:39 来源:oir作者:oir