资源限制

Linux 系统使用限制机制或配额机制为系统资源提供服务质量,并且包含异常进程。

这些限制分为系统级别和用户级别。如果需要修改这些限制,则了解不同的限制配置会有帮助。

系统范围限制

部分全局资源限制在 Linux 内核中实施,并且可以使用内核参数进行控制。

例如,可以使用 fs.file-max 参数来设置针对最大打开文件数的全局限制。此限制应用于所有进程,并且用户不能超过其他限制值。

检查限制

可以使用 sysctl -n <PARAMETER> 来检查当前值。例如:

sysctl -n fs.file-max

默认情况下,此 fs.file-max 值在 Clear Linux OS 系统中有意设置得较高。可以使用以下命令检查系统支持的最大值:

cat /proc/sys/fs/file-max

替代限制

可以使用 sysctl -w <PARAMETER> 来替代某个值。例如:

sudo sysctl -w fs.file-max=<NUMBER>

如果需要永久值,可以通过创建 /etc/sysctl.d/*.conf 文件来设置值(有关详细信息,请参见 man sysctl.d)。例如:

sudo mkdir -p /etc/sysctl.d/

sudo tee /etc/sysctl.d/fs-file-max.conf  > /dev/null <<'EOF'
fs.file-max=<NUMBER>
EOF

每用户限制

对于不由 systemd 管理的进程,可以在 /etc/security/limits.conf 文件中使用上限和下限基于用户为 PAM 登录设置资源限制。

可以设置临时值,并使用 ulimit 命令检查当前值。例如,要更改当前用户的最大打开文件数描述符的软限制:

ulimit -S -n <NUMBER>

有关详细信息,请参见 man limits.conf

服务限制

使用 systemd 单元启动的服务的资源限制不遵循正常用户限制,因为进程在单独的 Linux 控制组 (cgroup) 中启动,Linux cgroup 将相关的进程组相关联并提供资源计帐。

可以在相应的单元文件或配置放置目录中使用资源限制指令来控制各个 systemd 服务的资源限制。请参见 process properties section of the systemd.exec man page

可以使用 /etc/systemd/system.conf.d/ 目录中的文件来控制所有 systemd 服务的资源限制。例如,要禁用对最大打开文件数的限制:

sudo mkdir -p /etc/systemd/system.conf.d/

sudo tee /etc/systemd/system.conf.d/50-nfiles.conf  > /dev/null <<'EOF'
[Manager]
DefaultLimitNOFILE=infinity
EOF