linux句柄数过高排查及调整

2024年05月28日 04:04  ·  阅读 908

 做linux系统上的后端代码开发,偶尔会碰到后台报错:too many file open  XXXX  ,紧跟着是socket open timeout  。这种情况大部分是因为linux 文件句柄数满掉引起的。linux操作系统默认的句柄数为1024,windows默认的句柄数为6万。所以linux操作系统更容易出现句柄数不够用的情况。但是1024的句柄数在大部分情况下也是够用的,除非这台linux是类似:日志服务器、监控服务器等提供服务,并且被大量IP链接的才需要扩大句柄数(改linux系统参数+重启linux)。我们先通过如下的命令来查询当前总文件句柄数和系统设置的文件句柄数:


1.查看系统设置的文件句柄数

more /proc/sys/fs/file-max

2.查看当前打开句柄总数

lsof|awk '{print $2}'|wc -l

3.根据打开文件句柄的数量降序排列,找出哪个进程占用的句柄数最高

lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more

image.png


4.根据获取的进程ID查看进程的详情

ps -ef|grep 12281 (其中12281换为上一个步骤查询到的pid)

image.png

如果是java系统的,我们还可以使用jdk自带的线程导出工具,把全部的线程导出:

jstack -l 12281 >> /usr/local/Client/log20180116.log     (其中12281换为实际的pid)

5.修改linux单进程最大文件连接数

修改linux系统参数。vi /etc/security/limits.conf 添加
*  soft  nofile  65536
*  hard  nofile  65536

修改以后保存,注销当前用户,重新登录,执行ulimit -a ,ok ,参数生效了:

下面还记录一些常用的统计打开句柄数的方法:

统计各进程打开句柄数:lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr

统计各用户打开句柄数:lsof -n|awk '{print $3}'|sort|uniq -c|sort -nr

统计各命令打开句柄数:lsof -n|awk '{print $1}'|sort|uniq -c|sort -nr

评论
全部评论