突破操作系统ulimit的限制

ulimit是用来限制进程对资源的使用的,系统里面的默认值在高流量,大并发的服务器上很可能会限制机器硬件性能的发挥。常见的错误很能是too many open files。为了发挥机器的硬件性能,我们都会修改一些默认值。

通过ulimit -a 命令可以查看相关的值。注意每个系统的默认值是不一样的。我的操作系统是centos7。

ulimit -a 的输出结果如下,我在关键信息后面都标注了解释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
core file size          (blocks, -c) 0 #
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 63382
max locked memory (kbytes, -l) 64 #每个进程可以锁住的物理内存的最大值
max memory size (kbytes, -m) unlimited #每个进程可以使用的常驻内存的最大值
open files (-n) 1024 #每个进程可以同时打开的最大文件数, 不能是unlimited
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值
real-time priority (-r) 0
stack size (kbytes, -s) 8192 #单个进程能够使用的最大栈大小
cpu time (seconds, -t) unlimited #单个进程的最大CPU时间, 也就是可使用CPU的秒数
max user processes (-u) 4096 #单个用户可同时运行的最大进程数, 不能是unlimited
virtual memory (kbytes, -v) unlimited #每个进程可使用的最大虚拟内存
file locks (-x) unlimited #每个进程能锁住的最大文件个数

一般压制机器性能的是open filesmax user processes项。修改这两项的方法如下(需要sudo权限):
修改 open files
vim /etc/security/limits.conf 在文件中添加如下内容。

1
2
3
4
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535

修改max user processes
vim /etc/security/limits.d/20-nproc.conf 修改 nproc的值为65535。
注意 centos7下面是20-nproc.conf,不同操作系统版本文件名称不一样

重新登录shell, 用ulimit -Hn和ulimit -Sn确认修改已生效.

一点点说明:
  1. /etc/security/limits.d/里面的文件里面的配置会覆盖/etc/security/limits.conf的配置,也就是说limits.d目录下的配置文件优先级更高。
  2. nproc : 是操作系统级别对每个用户创建的进程数的限制
  3. nofile : 是每个进程可以打开的文件数的限制
  4. 第一列表示用户,* 表示所有用户
  5. 这些修改最好在拿到机器就修改,如果是应用已经跑起来了在修改这些值,需要把应用进行重启操作。

推荐阅读
操作系统是如何管理内存的
你的内存够用吗

-------------本文结束-------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%