Linux ulimit命令介绍
ulimit是一个内置的Linux shell命令,用于查看或限制单个用户消耗的系统资源量。在多用户和系统性能问题的环境中,限制资源使用是非常有价值的。在本教程中,你将学习如何使用Linux中的ulimit命令,并通过一些实例来演示。
Linux ulimit命令适用的Linux版本
ulimit命令在大多数Linux发行版中都是可用的,但是不同的发行版可能对资源的限制有不同的默认值和最大值。例如,CentOS 7和CentOS 8的最大文件描述符数分别为1024和4096³。如果你想修改这些值,你需要有超级用户权限,并编辑/etc/security/limits.conf文件。这个文件是定义ulimit使用的系统资源分配设置的配置文件。修改这个文件中的值会在系统重启后持久化。例如,如果你想将CentOS 8的最大文件描述符数提高到8192,你可以在文件中添加以下内容:
[linx@bashcommandnotfound.cn ~]$ sudo vim /etc/security/limits.conf
# 添加以下内容
* hard nofile 8192
* soft nofile 8192
Linux ulimit命令的基本语法
ulimit命令的一般语法如下:
ulimit [flags] [limit]
其中,[flags]是用于指定要查看或限制的资源的选项,[limit]是给定资源的新值。如果省略[limit],则表示只查看当前的值。例如,要设置物理内存大小(以千字节为单位),输入:
ulimit -m 15000
Linux ulimit命令的常用选项说明
ulimit命令有很多选项,可以用来查看或限制各种系统资源。下表列出了一些常用的选项:
选项 | 描述 |
---|---|
-H | 给定资源的硬限制。只有root用户可以提高硬限制,任何进程都可以降低它。 |
-S | 给定资源的软限制。任何进程都可以改变软限制。 |
-a | 列出所有当前资源的限制。 |
-c | 核心转储文件的大小,以512字节的块为单位。 |
-d | 数据区域的大小,以千字节为单位。 |
-f | 文件大小限制,以块为单位。如果使用[limit]参数,则表示设置新的限制。如果不指定[limit],则表示报告文件大小限制。 |
-n | 一个进程可以拥有的文件描述符的最大数量。 |
-s | 栈的大小,以千字节为单位。 |
-t | 指定一个进程的最大运行时间,以秒为单位。 |
-u | 指定一个用户可以创建的进程数。 |
-v | 进程可用的最大虚拟内存。 |
注意:如果你的系统不支持某个功能,相应的选项就不会起作用。
Linux ulimit命令的实例
下面是一些使用ulimit命令的实例,展示了如何查看和修改资源的限制。
- 查看所有资源的限制
[linux@bashcommandnotfound.cn ~]$ 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) 31190
max locked memory (kbytes, -l) 64
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) 31190
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
- 限制用户可以创建的进程数
[linux@bashcommandnotfound.cn ~]$ ulimit -u 10
如果我们试图超过这个限制,我们会遇到一个错误:
bash: fork: retry: Resource temporarily unavailable
- 限制用户可以创建的文件大小
[linux@bashcommandnotfound.cn ~]$ ulimit -f 100
如果我们现在试图超过这个限制,我们会看到这样的结果:
[linux@bashcommandnotfound.cn ~]$ cat /dev/zero > file
File size limit exceeded (core dumped)
[linux@bashcommandnotfound.cn ~]$ ls -lh file
-rw-rw-r--. 1 linuxconfig linuxconfig 100K Nov 27 10:47 file
Linux ulimit命令的注意事项
- ulimit命令只对当前的bash shell会话有效。如果你想对所有用户或特定用户进行永久的修改,你需要编辑/etc/security/limits.conf文件,并重新登录或重启系统。
- ulimit命令只能降低资源的限制,不能提高它。如果你想提高资源的限制,你需要有root权限,并编辑/etc/security/limits.conf文件。
- ulimit命令的选项和参数可能因系统而异。你可以使用man ulimit或help ulimit来查看你的系统支持的选项和参数。
- 如果你尝试运行一个不存在的命令,你可能会看到这样的错误:
bash: xxx: command not found
这表示你的系统没有安装这个命令,或者这个命令不在你的PATH环境变量中。你可以使用which命令来查找一个命令的位置,或者使用yum或apt等包管理器来安装一个命令。
评论区