在线动态修改ulimit

前言

系统中有些地方会进行资源的限制,其中的一个就是open file的限制,操作系统默认限制的是1024,这个值可以通过各种方式修改,本篇主要讲的是如何在线修改,生产上是不可能随便重启进程的

实践

查看系统默认的限制

[root@lab8106 ~]# ulimit -a|grep open
open files                      (-n) 1024

默认的打开文件是1024

[root@lab8106 ~]# ps -ef|grep ceph-osd
ceph     28176     1  0 18:08 ?        00:00:00 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
root     28619 26901  0 18:10 pts/3    00:00:00 grep --color=auto ceph-osd
[root@lab8106 ~]# cat /proc/28176/limits |grep open
Max open files            1048576              1048576              files

ceph osd的进程的这个参数是1048576

通过配置文件修改

这个参数控制是放在:

[root@lab8106 ~]# cat  /usr/lib/systemd/system/ceph-osd@.service |grep LimitNOFILE -B 1
[Service]
LimitNOFILE=1048576

这个地方设置的,如果我们有需要修改,那么可以修改这里,这不是本篇的重点,对于运行中的进程如何修改呢

在线修改进程的limit

这里调用的是prlimit进行的在线修改
查询指定进程的限制

[root@lab8106 ~]# prlimit --pid 28176
RESOURCE   DESCRIPTION                             SOFT      HARD UNITS
AS         address space limit                unlimited unlimited bytes
CORE       max core file size                         0 unlimited blocks
CPU        CPU time                           unlimited unlimited seconds
DATA       max data size                      unlimited unlimited bytes
FSIZE      max file size                      unlimited unlimited blocks
LOCKS      max number of file locks held      unlimited unlimited 
MEMLOCK    max locked-in-memory address space     65536     65536 bytes
MSGQUEUE   max bytes in POSIX mqueues            819200    819200 bytes
NICE       max nice prio allowed to raise             0         0 
NOFILE     max number of open files             1048576   1048576 
NPROC      max number of processes              1048576   1048576 
RSS        max resident set size              unlimited unlimited pages
RTPRIO     max real-time priority                     0         0 
RTTIME     timeout for real-time tasks        unlimited unlimited microsecs
SIGPENDING max number of pending signals         192853    192853 
STACK      max stack size                       8388608 unlimited bytes

修改指定运行进程的限制

[root@lab8106 ~]# prlimit --pid 28176 --nofile=104857
[root@lab8106 ~]# prlimit --pid 28176 |grep NOFILE
NOFILE     max number of open files              104857    104857 

可以看到修改成功了

总结

一般来说ulimit这个限制都是在终端上修改对下次生效,本篇用来记录如何在线修改,如果碰到了,可以这样处理

变更记录

Why Who When
创建 武汉-运维-磨渣 2017-03-06