Linux常用命令-ulimit

命令

ulimit

描述

Modify shell resource limits
设置系统资源限制

用法

1
ulimit [-SHacdefilmnpqrstuvx] [limit]

选项

1
2
3
4
5
6
7
8
9
10
11
Options:
-S 使用软资源限制
-H 使用硬资源限制
-a 显示所有资源限制值
-c 设置core文件最大值,单位:blocks
-d 设置进程数据段最大值,单位:kbytes
-f 设置shell可以创建的最大文件大小,单位:blocks
-m 设置可以使用的内存上限,单位:kbytes
-n 设置可以同时打开的文件数量上限
-u 设置用户最大进程数
-v 设置可以使用的虚拟内存上限,单位:kbytes

注意

对于服务器来说,内核参数file-max和ulimit都需要设置

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ 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) 7828
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 655350
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) 655350
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
# 临时更改限额
$ ulimit -n 65535
$ ulimit -n
65535
# 全局更改资源限制,添加如下配置到conf文件中,nproc表示-u选项,nofile表示-n选项,建议重启机器
$ more /etc/security/limits.conf
* soft nproc 655350
* hard nproc 655350
* soft nofile 655350
* hard nofile 655350
# 同时需要删除或重命名以下子配置文件,避免影响全局配置
$ mv /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.bak

关于最大文件句柄数
对于服务器来说,内核参数file-max和ulimit都需要设置,否则会出现文件描述符耗尽的问题。一般如果遇到文件句柄达到上限时,会碰到”Too many open files”或者Socket/File: Can’t open so many files等错误。
file-max 内核参数,表示系统级别的能够打开的文件句柄的数量,即系统所有进程一共可以打开的文件数量,是对整个系统的限制,并不是针对用户的。
ulimit -n 控制进程级别能够打开的文件句柄的数量,即当前shell及其启动的进程可以打开的文件数量,这是进程级别的。

修改系统级别能够打开的最大文件句柄数量

1
2
3
4
5
6
7
8
9
10
# 临时生效
$ echo 655350 > /proc/sys/fs/file-max

# 永久生效
$ vim /etc/sysctl.conf
fs.file-max = 655350
# 执行以下命令生效
$ sysctl -p
# 验证命令
$ cat /proc/sys/fs/file-max