最大文件打开数的正确修改姿势

前几天查看heka日志的错误日志的时候,发现报错信息 too many open files,很明显打开文件数过多了。

第一个问题来了,如何查看当前进程打开的文件数和最大打开文件数呢?

当前进程打开文件数

ls /proc/[pid]/fd|wc -l

当前进程最大打开文件数
cat /proc/[pid]/limits|grep open

可以看到如下所示的输出:

Max open files            1024                 4096                 files

当前系统最大打开文件数
ulimit -n

第二个问题是我该如何修改进程的最大文件打开数呢?
找到最大文件打开数的设置方法,这个问题也就解决了,通常有下面几种修改方式:
1)ulimit -n 102400 直接使用ulimit命令修改,但这个只会对当前会话生效,终端关闭后,设置丢失。
2)/etc/security/limitd.conf 文件中增加limits的配置,一般如下:

*               soft   nofile       102400

配置的具体含义,大家自行搜索。/etc/security/limitd.conf 在每一个会话创建时都会加载,所以修改这里是一个使配置长期生效的方法。
3)修改shell的启动项,将ulimit -n 102400放进去,每次创建会话时也会加载。一般是/etc/profile文件,或者/etc/profile.d/limits.sh中。

到此为止,配置好了,你通过 ulimit -n 查看系统的最大文件打开数已经生效了。但此时查看进程的最大文件打开数没有变,原因是这个值是在进程启动的时候设定的,要生效必须重启!

ok,那就重启吧,重启完毕,结果发现依然没变!这奇了怪了,后来经过好久的排查,最终确认问题是,该程序是通过 supervisord来管理的,也就是这进程都是 supervisord 的子进程,而 supervisord 的最大文件打开数还是老的配置,此时必须重启 supervisord 才可以。后来在saltstack上也遇到了同样的问题,必须把所有的 salt-minion 重启。

当大家遇到limits修改不生效的时候,请查一下进程是否只是子进程,如果是,那就要把父进程也一并重启才可以。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值