简介

Linux 对于每个用户,系统是会默认限制一个最大使用资源值。为提高性能,可根据设备资源情况,设置各 Linux 用户的最大进程数等可调用资源上限。

下面介绍一个命令:ulimit,可以查看 & 控制 Linux 的系统资源。

原文链接:https://blog.csdn.net/FreeApe/article/details/101058393

ulimit

该命令用于控制 shell 程序的资源,支持一下各种类型的资源限制:

  • 创建的内核文件大小
  • 进程数据块大小
  • Shell 进程创建文件大小
  • 内存锁锁住的大小
  • 常驻内存集的大小
  • 打开文件描述符的长度
  • 分配堆栈的最大使用大小
  • CPU 使用总时间
  • 单个用户的最大开启线程数
  • Shell 进程所能使用的最大虚拟内存
  • EX:硬资源 & 软资源限制

常用参数:

ulimit -a 输出解释:

可以直接在 /etc/security/limits.conf 文件中设置配置 & 参数,并 reboot 重启生效。

实际应用&讲解

ulimit 可以限制使用系统资源的范围,是一个系统内置的 bash 命令。

ulimit 设置项仅在当前 shell 作用(类似 export,想永久生效可以写入相关配置文件中),即是 Shell Session 级别的作用。

写入 ~/.profile 或 ~/.bashrc 只对当前用户持久性生效

写入 /etc/security/limits.conf 可针对性配置,系统级持久性生效

调整相关硬限制值(Hard Limit),设置一次后,以后的值只能小于上一次设置的值。

如果不加 S 或 H 修饰,则默认同时修改 Soft Limit 和 Hard Limit 值。

(1)hard limit 和 soft limit

软限制是内核对相应资源强制执行的值,硬限制作为软限制的上限,软限制值无法超过硬限制的值。

如果没有相应的设置权限(sudo/root),只能将其软限制设置为 0 ~ 硬限制范围内的值,并且降低其硬限制,即硬限制值修改了,后面再修改只能降低不能升高,当然软限制值只要在硬限制值范围内都可以多次修改。而拥有设置权限的用户可以对任一限制的值进行任意更改。

(2)修改默认 limit 值

2.1 持久性更改

2.1.1 多用户级更改

通过配置 /etc/security/limits.conf 文件,可以更改 ulimit 的默认资源限制值。包括对指定用户使用资源的限制配置。

通过设置 domain 来指定生效范围,也可以指定用户名、用户组名等。

注意:修改后 reboot 重启生效

2.1.2 单用户级更改

可以将 ulimit 配置写入到相关配置文件中。一般来说 profile 是与环境变量相关的配置,如 PATH,而 bashrc 与 shell 相关的配置。因此可以写入到 bashrc 文件中。

注意:根据上述原理解释,单用户级更改因没有权限,更也只会在 (0 ~ 硬限制上限)之间设置才能生效,否则会出现错误。

例如:Error:ulimit core file size cannot modify limit operation not permitted

2.2 临时性更改

同理,直接在终端中执行 ulimit,就是临时性更改,类似 export 命令。由于权限原因,硬限制修改出错,软限制修改范围内 OK,范围外修改出错

2.3 系统级更改(内核级别修改,慎重)

举例:file-max 是可以在整个系统(内核)中打开的最大文件数。这是在内核级别强制执行的。该值可以临时调整,无需重启生效: