Too many open files

业务异常信息中包含了“too many open files”,最后定为是重启JAVA进程的时候,文件最大打开数被设置小了。

  

1、查看Java进程能够打开的最大文件数

cat /proc/[pid]/limits,其中max open files就是能打开的最大文件数。

  

  

2、查看java进程现在打开的文件数

lsof -p [pid] | wc -l

可以使用 lsof -p 26374 > /tmp/java_pid_lsof.log导出之后查看详情。

其中web应用中,很多jar包、日志文件、TCP连接等都占用文件数量。

  

3、针对java进程的open files限制,进行赋值。

    在java进程启动的脚本中进行控制,例如:ulimit -n number,如果不设置,取父进程的限制,如果父进程无,则继承当前用户的限制设置。

    用户的limits可通过/etc/security/limits.conf来控制,也可通过放入/etc/security/limits.d/*.conf来控制,limits.conf内容怎么写这个在文件本身有很详细的解释,就不在这里多说了。

  

4、查看特定用户的限制

    通过ulimit -a来查看当前用户的限制描述。

 

  

5、系统级的限制如何看

        两途径查看,系统级的限制对所有用户生效。

        第一种:cat /proc/sys/fs/file-max 

        

        第二种:sysctl -a | grep file-max

        

  

6、查看文件被打开的进程

           lsof path/filename

        lsof /usr/local/JDK-1.6.0_06/jre/lib/jce.jar

  

  

7、其他

        至于如何查到对应的Java代码中为什么打开了这么多的文件,主要可通过btrace监控文件API和socket open的相关API的调用,从而确定原因。

        顺带说下,max processes是用于限制进程本身最多派生的子进程数以及线程数个数,对于java而言,主要就是限制线程数,可通过ulimit -u来做设置。

ulimit: usage: ulimit [-SHacdfilmnpqstuvx] [limit],可以通过红框里边的参数进行具体数值的参考及设置。

 

其它文章: http://blog.yufeng.info/archives/1380

转载于:https://my.oschina.net/xiangtao/blog/1505119

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值