java.net.SocketException: Too many open files问题分析及解决方案 (一)

2014-11-24 10:55:35 · 作者: · 浏览: 0

java web应用在执行一段时间之后出现了这么个问题

[java] ava.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:453)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:216)

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:453)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:216) 用ulimit -a看看linux打开文件限制

[java] [admin@test ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 360448
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 360448
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

[admin@test ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 360448
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 360448
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

[java] 用lsof -p [进程ID] 可以看到某ID的打开文件状况。进程ID可能用 ps -ef|grep java列出

用lsof -p [进程ID] 可以看到某ID的打开文件状况。进程ID可能用 ps -ef|grep java列出

[java] [admin@test ~]# lsof -p 1940
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 1940 admin cwd DIR 0,68 4096 385090717 /admin/apache-tomcat-7.0.39/bin
java 1940 admin rtd DIR 0,68 4096 384141801 /
java 1940 admin txt REG 0,68 47308 385122308 /admin/jdk1.6.0_13/jre/bin/java
java 1940 admin mem REG 202,3 385122339 /admin/jdk1.6.0_13/jre/lib/i386/client/libjvm.so (path dev=0,68)
java 1940 admin mem REG 202,3 385122308 /admin/jdk1.6.0_13/jre/bin/java