简介
在这个实验中,你将学习如何验证 Linux 中 ulimit
设置是否正确应用。你将探索不同的方法来检查资源限制,首先使用 ulimit -a
显示当前 shell 的限制。
接下来,你将查看系统范围的配置文件 /etc/security/limits.conf
,以了解如何为用户和组设置限制。最后,你将学习如何通过检查运行进程的 /proc
条目来验证应用于该进程的实际限制。这种实践方法将让你全面了解资源限制的工作原理,以及如何在 Linux 环境中排查相关问题。
在这个实验中,你将学习如何验证 Linux 中 ulimit
设置是否正确应用。你将探索不同的方法来检查资源限制,首先使用 ulimit -a
显示当前 shell 的限制。
接下来,你将查看系统范围的配置文件 /etc/security/limits.conf
,以了解如何为用户和组设置限制。最后,你将学习如何通过检查运行进程的 /proc
条目来验证应用于该进程的实际限制。这种实践方法将让你全面了解资源限制的工作原理,以及如何在 Linux 环境中排查相关问题。
在这一步中,你将使用 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
命令。熟悉显示的不同类型的限制。
点击 继续 进入下一步。
在上一步中,你使用 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>
:可以是 soft
或 hard
。
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
目录下文件的设置。
点击 继续 进入下一步。
在前面的步骤中,你学习了使用 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 Limit
和 Hard 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
验证了正在运行的进程的实际资源限制,该文件显示了当前进程的有效限制,展示了如何检查应用于特定进程实例的限制。