Linux server上too many open files问题

之前测试遇到了"too many open files"的问题。ulimit -Hn 查了下发现server上最大open file数是4096。写了个简单的脚本检测发现进程创建的fd个数在不断增加,8分钟之后达到上限然后程序报错,其中绝大部分fd都是关于socket的。

 

在server上安装lsof查看当前进程打开文件,并定位出现频率最高的通信主机和端口。最后发现是一个Java程序bug,每两秒执行一次的方法会不断创建新的httpclient。修正bug后进程创建的fd数稳定在24。

 

lsof -i -a -p $PID 可以列出进程打开的所有network files。所用的简单检测脚本为

#!/bin/bash

cd /proc/$(ps -ef | grep appName | grep -v grep | awk '{print $2}')/fd

while true

do

ls -l | grep socket | wc -l

sleep 5

done 

 

 

posted @ 2017-06-26 17:58  小张的练习室  阅读(194)  评论(0编辑  收藏  举报