使用ulimit命令控制系统资源

时间:2020-03-05 15:29:58  来源:igfitidea点击:

在此教程中,我们将了解Linux中的ulimit命令。
我们将如何使用它来控制系统资源分配。

Linux中的ulimit是什么?

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

这种类型的控制可以在全局,组和用户级别强制执行。
除了确保对任务的顺利加工之外,它还可以防止不需要的过程能够吞噬内存等系统资源和CPU功率。

ulimit链接到安全配置文件。

确切位置可能会有所不同,但通常是"/etc/security/limits.conf"的类似类似的。
Ulimit允许我们快速编辑该配置。

软与硬限制

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

如果用户可以调整它,我们可能会想知道为什么甚至设置限制。
这是柔软和硬限制进入游戏的地方。

因此,从管理员角度来看,我们可能更喜欢用户将悬停在某个值周围。
这将是你的软限制(让我们说25)。

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

在Linux中使用ulimit

这是ulimit命令的语法:

ulimit <options>

显示任何用户的所有限制

我们可以以这种方式显示指定用户的所有类型的限制:

ulimit -a user_name

"-A"标志将为特定用户名显示所有选项及其配置。

如果省略user_name,它会显示限制。
让我向我们展示为我设置的限制:

Hyman@theitroad:~$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

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

Hyman@theitroad:~$ulimit -Hu
31503

改变限制(暂时)

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

Hyman@theitroad:~$ulimit -u 31500
Hyman@theitroad:~$ulimit -Hu
31500

值得注意的是,PROFILIEGE允许我们暂时写入并影响我们当前的shell的任何更改。

要确认此问题,我退出了我的shell并创建了一个新终端并获得了原始默认值。

Hyman@theitroad:~$ulimit -Hu
31503

下一节展示了如何使更改永久变化。

对ulimit进行永久性变化

正如我在文章开始的那样,ulimit由/etc/security/limits.conf管理。
如果要对任何用户的ulimits进行任何永久更改,则必须将安全文件更改为root。

编辑时,我们需要包含这四个元素:

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

以下是我添加到文件的文本,以便为用户克里斯图普人(即我自己的帐户)的进程数的困难限制:

igi    hard    nproc   2000

请记住,除非我们充分意识到潜在后果,否则最好的做法是不启用root帐户。
我已经在虚拟机上完成了这一点,所以你不必自己这样做。

Hyman@theitroad:~$su
Password: 
Hyman@theitroad:/home/igi# nano /etc/security/limits.conf 
Hyman@theitroad:/home/igi# exit
exit
Hyman@theitroad:~$ulimit -u
20000

正如我们所看到的,"Hyman"的限制已更改为20000。

如何知道用于编辑/etc/security/limits.conf文件的用于编辑什么关键字?
嗯,这是一个包含可能的项目关键字及其描述的表:

核心关键字说明
core限制核心文件大小(KB)
data最大数据大小(KB)
fsize最大文件大小(KB)
memlock最大锁定内存地址空间(KB)
nofile打开的文件描述符的最大数目
rss最大驻留集大小(KB)
stack最大堆栈大小(KB)
cpu最大cpu时间(分钟)
nproc最大进程数
as地址空间限制(KB)
maxlogins此用户的最大登录次数
maxsyslogins系统上的最大登录数
priority运行用户进程的优先级
locks用户可以持有的最大文件锁数
sigpending最大挂起信号数
msgqueue–POSIX消息队列使用的最大内存(字节)
nice允许提升到值的最大nice优先级:[-20,19]
rtprio最大实时优先级
chroot将根目录更改为目录(特定于Debian)

|限制类型|描述|
| --- - | --- |
|hard|硬限制|
|soft|软限制|
| - |硬度和软限制|

为组修改ulimit

更改组策略与我们在上一节中所看到的内容非常相似,但我们将在组名称之前包含一个@符号。

以下是我设置组学生的最大登录数的示例是通过编辑/etc/security/limits.conf文件来实现群体学生的最大登录数为4:

@student    -   maxlogins   4