trouble shooting--linux打开文件描述过多问题解决及linux资源控制

1.前言

工作中遇到过linux系统某个进程“打开文件数过多”的告警或者报错。这个问题临时解决好办:重启进程、重启节点、ulimit -n num命令 临时扩大限制都可以解决。根本解决当然是检查进程是否存在打开文件描述后未释放,以及linux设置的资源限制是否合理才是关键。

2.排查

  • 查看当前进程已经打开的文件描述符数量,以及检查打开的文件是否预期:
    ①lsof -p PID |wc -l
    或者②ls -l /proc/PID/fd/ | wc -l
    在这里插入图片描述
    如上排查可知,文件已经删除,但是文件描述为关闭,导致文件描述符泄露了。

辅助命令扩展

  • 查看当前用户最大允许打开的文件数:
[appdeploy@****411]$ulimit -n
526488
[appdeploy@****411]$ulimit -a | grep "open files"                                                      
open files                      (-n) 526488
  • 查看当前进程最大允许打开的文件数:cat /proc/PID/limits
  • 查看当前系统最大允许打开的文件数:cat /proc/sys/fs/file-max
  • 查看当前系统各个用户创建的进程数:ps h -Led -o user | sort | uniq -c | sort -n

3.调整设置

1)临时设置用户允许打开的最大文件数:

#soft limit,注意:注意soft limit必须小于hard limit
ulimit -n 40960 (同ulimit -Sn 40960)
#hard limit
ulimit -Hn 50000

2)永久设置用户允许打开的最大文件数:

[appdeploy@**** 411]$cat>>/etc/security/limits.conf<<-EOF  
#soft是软限制,超过只会告警;hard是硬限制,超过就报错。
>#<domain>        <type>  <item>  <value>
>#appdeploy用户的限制
>appdeploy	hard    nofile 65535
>appdeploy	soft    nofile 4096
>#mwopr组的限制
>#@mwopr	hard    nofile 65535
>#@mwopr	soft    nofile 4096
>EOF ```

4.扩展:linux资源控制

linux可以实现组、用户、进程级别的各种资源进行控制,如cgroup工具,ulimit命令等,但两者有一定的区别。

  • ulimit命令出现较早,主要可以实现如最大允许打开文件、CPU使用时间、CPU调度亲和性等的控制,(清单如下)。单ulimit控制也是比较有限的,比如ulimit就无法实现磁盘允许使用的控制,而cgroup就可以实现。
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 31154
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 524288
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) 524288
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
  • cgroups(即control groups)是2007年从2.6.24引入linux内核主线,目前默认已启用该特性。 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值