日期:2014-05-20  浏览次数:20745 次

linux系统java.net.SocketException: Too many open files
之前linux系统没有重整的时候程序在weblogic下运行正常,而且从效率上和并发上来讲基本没出现过问题,
但是后来linux系统重装后出现了下面问题,请高手指点。
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
at java.net.ServerSocket.implAccept(ServerSocket.java:450)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at com.derun.socket.Server.listen(Server.java:31)
at com.derun.socket.Server.<init>(Server.java:20)
at com.derun.socket.Server.startServer(Server.javar:106)

------解决方案--------------------
打开/etc/security/limits.conf文件,查看下两项:
root soft nofile 
root hard nofile 
后面的值,如果太小,就加大,如果没有,就直接加进去:如:

root soft nofile 5000
root hard nofile 6000
------解决方案--------------------
引用
将linux的句柄数适当调大一点。。一般跑应用程序调到4096比较合适。。默认是1024有点小了。。。

在linux系统中,这个问题算是比较常见的。。。
解决方案大致两个方向:
1. 调大系统本身句柄数上限。。
2. 查看程序句柄未关闭bug,即数据库连接。。或者某处文件IO操作未关闭。。

查看java程序句柄数:
Shell命令: lsof -n|awk '{print $2}'|sort|uniq -c |sort -nr|more
例如结果: 341 24204
287 24231
观察java程序占用的句柄数结果。。

查看的某个如24204进程详细内容 如
Shell命令:ps -aef|grep 24204

查看系统单个进程允许打开的文件句柄最大数:如
Shell命令:ulimit –n
更改设置系统单个进程允许打开的文件句柄最大数:如
Shell命令:ulimit -HSn 4096


------解决方案--------------------
探讨
打开/etc/security/limits.conf文件,查看下两项:
root soft nofile
root hard nofile
后面的值,如果太小,就加大,如果没有,就直接加进去:如:

root soft nofile 5000
root hard nofile 6000