如何检查 Linux 中 ulimit 设置是否生效

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何验证 Linux 中 ulimit 设置是否正确应用。你将探索不同的方法来检查资源限制,首先使用 ulimit -a 显示当前 shell 的限制。

接下来,你将查看系统范围的配置文件 /etc/security/limits.conf,以了解如何为用户和组设置限制。最后,你将学习如何通过检查运行进程的 /proc 条目来验证应用于该进程的实际限制。这种实践方法将让你全面了解资源限制的工作原理,以及如何在 Linux 环境中排查相关问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicSystemCommandsGroup -.-> linux/help("Command Assistance") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") subgraph Lab Skills linux/echo -.-> lab-558811{{"如何检查 Linux 中 ulimit 设置是否生效"}} linux/help -.-> lab-558811{{"如何检查 Linux 中 ulimit 设置是否生效"}} linux/cat -.-> lab-558811{{"如何检查 Linux 中 ulimit 设置是否生效"}} linux/env -.-> lab-558811{{"如何检查 Linux 中 ulimit 设置是否生效"}} end

使用 ulimit -a 显示限制

在这一步中,你将使用 ulimit 命令了解 Linux 中的资源限制。资源限制控制着一个进程可以使用的系统资源的最大数量。这对于系统稳定性很重要,可防止单个进程耗尽所有可用资源。

ulimit 命令允许你查看和设置当前 shell 会话以及从该会话启动的任何进程的这些限制。

要显示所有当前的资源限制,请打开终端并输入以下命令:

ulimit -a

按下回车键。

你将看到类似如下的输出:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) <placeholder>
max locked memory       (kbytes, -l) <placeholder>
max memory size         (kbytes, -m) unlimited
open files                      (-n) <placeholder>
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) <placeholder>
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) <placeholder>
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

输出显示了各种资源限制,例如最大打开文件数 (-n)、最大用户进程数 (-u) 和最大栈大小 (-s)。unlimited 值表示该资源没有强制限制。

理解这些限制对于诊断性能问题或程序的意外行为至关重要。例如,如果一个程序因为无法打开足够的文件而失败,使用 ulimit -a 检查 open files 限制将是一个很好的第一步。

你也可以通过指定选项来查看单个限制。例如,要查看打开文件数的限制:

ulimit -n

这将输出一个表示当前打开文件限制的数字。

在你的终端中尝试使用 ulimit -a 命令。熟悉显示的不同类型的限制。

点击 继续 进入下一步。

使用 cat /etc/security/limits.conf 检查限制配置

在上一步中,你使用 ulimit -a 查看了当前 shell 会话的资源限制。这些限制通常在一个名为 /etc/security/limits.conf 的系统全局文件中进行配置。

该文件是可插拔认证模块(Pluggable Authentication Modules,PAM)框架的一部分,允许管理员在用户和组登录时为其设置资源限制。

让我们使用 cat 命令查看这个配置文件的内容。cat 是一个用于显示文件内容的简单命令。

打开终端并输入以下命令:

cat /etc/security/limits.conf

按下回车键。

你将看到 limits.conf 文件的内容。输出大致如下(注释和具体条目可能会有所不同):

## /etc/security/limits.conf
#
#This file sets the limits for the resources available to the login session of
#users and groups. It is used together with the pam_limits module.
#
## (it is recommended to use #include files from /etc/security/limits.d/)
#

#*               soft    core            0
#root            hard    core            unlimited
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           unlimited
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

该文件采用简单的格式:

<domain> <type> <item> <value>

  • <domain>:指定限制所适用的用户或组。可以是用户名、组名(前面加 @),或者用 * 表示所有用户。
  • <type>:可以是 softhard
    • soft 限制是当前限制,用户可以将其提高到 hard 限制的范围。
    • hard 限制是普通用户无法超越的最大限制。
  • <item>:被限制的资源项(例如,nproc 表示进程数量,nofile 表示打开文件的数量)。
  • <value>:限制值。

# 开头的行是注释,会被忽略。

注意 ## (it is recommended to use #include files from /etc/security/limits.d/) 这一行。这表明特定于系统或应用程序的限制通常会放在 /etc/security/limits.d/ 目录下的单独文件中。这有助于保持主 limits.conf 文件的简洁和有序。

虽然在这个实验中你不会修改这个文件,但理解其结构和用途对于系统管理很重要。你使用 ulimit -a 看到的限制通常源自这个文件以及 limits.d 目录下文件的设置。

点击 继续 进入下一步。

使用 cat /proc/self/limits 验证进程限制

在前面的步骤中,你学习了使用 ulimit 查看当前会话的限制,以及使用 /etc/security/limits.conf 进行系统全局配置。现在,让我们来看看一个正在运行的进程如何报告其自身的限制。

Linux 提供了一个名为 /proc 的虚拟文件系统,其中包含有关正在运行的进程和系统内核的信息。每个正在运行的进程在 /proc 下都有一个以其进程 ID(Process ID,PID)命名的目录。

特殊目录 /proc/self 是一个符号链接,它指向访问它的进程的 /proc 目录。因此,当你在终端中访问 /proc/self 时,你查看的是当前 shell 进程的信息。

/proc/self 目录内,有一个名为 limits 的文件,其中包含该特定进程的资源限制。

让我们使用 cat 命令查看当前 shell 进程的限制:

cat /proc/self/limits

按下回车键。

你将看到类似如下的输出:

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             unlimited            unlimited            processes
Max open files            1048576              1048576              files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       <placeholder>        <placeholder>        signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

此输出显示了每个资源的 Soft LimitHard Limit,与你使用 ulimit -a 看到的类似。这里的值反映了执行 cat 命令的进程(即你的 shell)实际应用的限制。

cat /proc/self/limits 的输出与第一步中 ulimit -a 的输出进行比较。你应该会发现这些值是一致的,因为 ulimit -a 报告的是当前 shell 进程的限制。

/proc 文件系统是检查 Linux 系统及其进程状态的强大工具。每个进程目录中的 limits 文件提供了一种直接的方式来验证该特定进程实际生效的资源限制。

你现在已经学习了三种不同的方法来与 Linux 中的资源限制进行交互:使用 ulimit -a 查看当前会话的限制,检查 /etc/security/limits.conf 中的系统全局配置,以及通过 /proc/<PID>/limits(或 /proc/self/limits)检查特定进程的限制。

点击 继续 完成本次实验。

总结

在本次实验中,你学习了如何检查 Linux 中 ulimit 设置是否生效。你首先使用 ulimit -a 命令显示了 shell 会话的当前资源限制,了解了诸如打开文件数、用户进程数和堆栈大小等各种限制。该命令能快速概览从当前 shell 启动的进程所继承的限制。

接下来,你使用 cat 命令查看了系统全局配置文件 /etc/security/limits.conf。此文件定义了用户和组的默认资源限制,这些限制会在登录时应用。最后,你通过查看 /proc/self/limits 验证了正在运行的进程的实际资源限制,该文件显示了当前进程的有效限制,展示了如何检查应用于特定进程实例的限制。