利用prlimit动态修改应用进程的最大文件打开数
文章发布较早,内容可能过时,阅读注意甄别。
# 前言
系统中有些地方会进行资源的限制,其中的一个就是 open file 的限制,操作系统默认限制的是 1024, 这个值可以通过各种方式修改,本篇主要讲的是如何在线修改,生产上是不可能随便重启进程的。
# 实践
# 查看系统默认的限制
[root@lab8106 ~]# ulimit -a|grep open
open files (-n) 1024
1
2
2
默认的打开文件是 1024:
$ ps aux |grep nginx
root 5648 0.0 0.2 46184 2216 ? Ss 15:23 0:00 nginx: master process nginx
www 5709 0.0 0.6 50780 6676 ? S 15:43 0:00 nginx: worker process
root 7044 0.0 0.0 112728 984 pts/1 R+ 17:16 0:00 grep --color=auto nginx
$ cat /proc/5648/limits |grep open
Max open files 10200 10200 files
1
2
3
4
5
6
2
3
4
5
6
Nginx 的进程的这个参数是 10200。
# 通过配置文件修改
这个参数控制是放在:
$ cat /usr/local/nginx/conf/nginx.conf |grep worker_rlimit_nofile
worker_rlimit_nofile 10200;
1
2
2
这个地方设置的,如果我们有需要修改,那么可以修改这里,这不是本篇的重点,对于运行中的进程如何修改呢。
# 在线修改进程的 limit
这里调用的是 prlimit 进行的在线修改 查询指定进程的限制
$prlimit --pid 5648
RESOURCE DESCRIPTION SOFT HARD UNITS
AS address space limit unlimited unlimited 字节
CORE max core file size 0 unlimited 块
CPU CPU time unlimited unlimited 秒数
DATA max data size unlimited unlimited 字节
FSIZE max file size unlimited unlimited 块
LOCKS max number of file locks held unlimited unlimited
MEMLOCK max locked-in-memory address space 65536 65536 字节
MSGQUEUE max bytes in POSIX mqueues 819200 819200 字节
NICE max nice prio allowed to raise 0 0
NOFILE max number of open files 10200 10200
NPROC max number of processes 3819 3819
RSS max resident set size unlimited unlimited 页数
RTPRIO max real-time priority 0 0
RTTIME timeout for real-time tasks unlimited unlimited 毫秒数
SIGPENDING max number of pending signals 3819 3819
STACK max stack size 8388608 unlimited 字节
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
修改指定运行进程的限制
[root@lab8106 ~]# prlimit --pid 5648 --nofile=65535
[root@lab8106 ~]# prlimit --pid 5648 |grep NOFILE
NOFILE max number of open files 65535 65535
1
2
3
2
3
可以看到修改成功了。
# 总结
一般来说 ulimit 这个限制都是在终端上修改对下次生效,本篇用来记录如何在线修改,如果碰到了,可以这样处理。
上次更新: 2024/07/04, 22:40:37