使用 Ulimit 命令控制系统资源使用

在本初学者教程中,您将了解 Linux 中的 ulimit 命令。 您将了解如何使用它来控制系统资源分配。

Linux 中的 ulimit 是什么?

Ulimit 是一个内置的 shell 命令,旨在显示、分配和限制资源。 任何系统都必须规范这些类型的控制。

这种类型的控制可以在全局、组和用户级别强制执行。 除了确保任务的顺利处理外,它还可以防止不需要的进程占用内存和 CPU 等系统资源。

超限 链接到安全配置文件。 您的确切位置可能会有所不同,但通常类似于 /etc/security/limits.conf. Ulimit 允许我们快速编辑该配置。

软限制与硬限制

作为用户,您实际上可以调整 ulimit 设置。

您可能想知道如果用户可以调整它,为什么还要设置限制。 这就是软限制和硬限制发挥作用的地方。

所以从 admin 从角度来看,您可能希望您的用户将鼠标悬停在某个值附近。 这将是您的软限制(比如说 25)。

然后,您可以建立该用户不能超过的硬限制 (50)。 用户将被授权将其限制从 25 增加到 50。

在 Linux 中使用 ulimit

以下是 ulimit 命令的语法:

ulimit <options>

显示任何用户的所有限制

您可以通过这种方式显示指定用户的所有限制:

ulimit -a user_name

-a flag 将显示您的特定用户名的所有选项及其配置。

如果您省略 user_name,它会为您显示限制。 让我向您展示默认情况下为我设置的限制:

[email protected]:~$ 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) 31503
max locked memory       (kbytes, -l) 65536
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 31503
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

当然,您的默认值可能与我的不同。 此视图显示描述、分配的标志(可用于更改限制)和配置。

显示硬限制和软限制

也可以使用标志查看这些各自的限制中的任何一个。

要显示软限制,请使用选项 -S:

ulimit -S

要显示硬限制,请使用选项 -H:

ulimit -H

将这些与上面的特定标志结合起来更有用。 因此,如果要检查最大用户进程数的硬限制,请键入:

[email protected]:~$ ulimit -Hu
31503

更改限制(临时)

现在,让我们将该值更改为 31500 以进行演示,并再次检查硬限制。

[email protected]:~$ ulimit -u 31500
[email protected]:~$ ulimit -Hu
31500

值得注意的是,您的权限允许您进行的任何更改都只会暂时写入并影响您当前的 shell。

为了确认这一点,我退出了我的 shell 并创建了一个新终端并获得了原始默认值。

[email protected]:~$ ulimit -Hu
31503

下一节将展示如何使更改永久生效。

对 ulimit 进行永久性更改

正如我在文章开头提到的,ulimit 由 /etc/security/limits.conf 管理。 如果要对任何用户的 ulimit 进行任何永久更改,则必须以 root 身份更改安全文件。

编辑时,您需要包括以下四个元素:

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

这是我附加到文件中的文本,用于为用户 christoper(即我自己的帐户)设置进程数的硬限制:

christopher    hard    nproc   2000

请记住,除非您完全了解潜在后果,否则最好不要启用 root 帐户。 我已经在虚拟机上完成了这个,所以你不必自己做。

[email protected]:~$ su
Password: 
[email protected]:/home/christopher# nano /etc/security/limits.conf 
[email protected]:/home/christopher# exit
exit
[email protected]:~$ ulimit -u
20000

如您所见,“christopher”的限制已更改为 20000。

您怎么知道使用什么关键字来编辑 /etc/security/limits.conf 文件? 好吧,这是一个包含可能的项目关键字及其描述的表格:

项目关键字描述
限制核心文件大小 (KB)
数据最大数据大小 (KB)
尺寸最大文件大小 (KB)
内存锁最大锁定内存地址空间 (KB)
无文件打开文件描述符的最大数量
RSS最大驻留集大小 (KB)
最大堆栈大小 (KB)
中央处理器最大 CPU 时间 (MIN)
nproc最大进程数
作为地址空间限制 (KB)
最大登录此用户的最大登录次数
最大系统登录系统上的最大登录数
优先事项运行用户进程的优先级
用户可以持有的最大文件锁数
正在等待挂起信号的最大数量
消息队列– POSIX 消息队列使用的最大内存(字节)
好的允许提升到值的最大优先级: [-20, 19]
rtprio最大实时优先级
chroot将根目录更改为目录(特定于 Debian)
限制类型描述
难的硬限制
柔软的软限制
硬限制和软限制

更改组的 ulimit

更改组策略与您在上一节中看到的非常相似,但您将包括一个 @ 组名前的符号。

这是一个 example 通过编辑 /etc/security/limits.conf 文件,我将组 student 的最大登录次数设置为 4:

@student    -   maxlogins   4

结论

我希望你喜欢这篇关于 ulimit Linux 命令的快速入门。

如果您有任何意见或问题,请在下方留言。 如果您对希望看到的主题有任何建议,也请随时留下。