Linux进程打开文件数量限制修改

一、查看进程打开文件数量

查看当前shell进程打开文件数量(open files行,也可以只查询nofile:ulimit -n):

# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 13583
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) 13583
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

查看某个进程1124打开文件数量(Max open files行):

# cat /proc/1124/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             13583                13583                processes
Max open files            1024                 524288               files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       13583                13583                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

二、修改进程打开文件数量

已运行的进程无法直接修改打开文件数量,需要修改shell下进程打开文件数量后重新启动原来的程序才行,

首先我们用ulimit修改当前bash进程的打开文件数量为5,然后测试一下在这个bash进程下启动的子进程打开文件数量是不是会出现问题:

# ulimit -n 5
# tail -n 1 -f /var/log/*.log
==> /var/log/boot.log <==

==> /var/log/dnf.librepo.log <==
2023-07-21T10:10:37Z INFO Downloading: http://mirrors.bclinux.org/bclinux/oe21.10/extras/x86_64/repodata/repomd.xml
tail: cannot open '/var/log/dnf.log' for reading: Too many open files
tail: cannot open '/var/log/dnf.rpm.log' for reading: Too many open files

可以看到在成功打开两个文件后tail再打开的文件就会报错(Too many open files),因为进程默认都会打开标准输入、输出和错误三个文件。

因此我们通过ulimit修改bash进程的打开文件数量后,在这个bash进程启动的子进程也会修改,但是这个是临时的,重新登录或者换一个shell就失效了。

如何永久修改这个进程打开文件数量呢?我们需要修改/etc/security/limits.conf这个配置文件,例如将进程打开文件数量设置为65535:

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>

* soft nofile 65535
* hard nofile 65535

重启系统后会发现shell进程默认的进程打开文件数量已经被修改为65535:

# ulimit -n
65535

三、修改systemd启动服务进程打开文件数量

我们修改了/etc/security/limits.conf之后以为万事大吉了,但是当你的程序是用systemd来管理的时候你会发现事与愿违。原因是systemd有自己的进程打开文件数量配置,当你的程序是用systemd来管理的时候需要修改/etc/systemd/system.conf,例如我们将nofile修改为2048(如果soft和hard值不一样可以用冒号分隔,2048:65535):

DefaultLimitNOFILE=2048

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值