现象:
tomcat设置的线程数为2000.
对tomcat进行并发2000的报文请求。
catalina.2012-10-25.log中出现如下错误:
2012-10-25 14:28:08 org.apache.tomcat.util.net.JIoEndpoint$Acceptor run
SEVERE: Socket accept failed
Throwable occurred: java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:451)
at java.net.ServerSocket.implAccept(ServerSocket.java:464)
at java.net.ServerSocket.accept(ServerSocket.java:432)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352)
at java.lang.Thread.run(Thread.java:736)
处理:
1.执行ulimit -a,可以看到如下信息:
time(seconds) unlimited
file(blocks) unlimited
data(kbytes) 131072
stack(kbytes) 32768
memory(kbytes) 32768
coredump(blocks) unlimited
nofiles(descriptors) 2000
threads(per process) unlimited
processes(per user) unlimited
即,允许一个进程打开的文件是为2000(nofiles)。
2.
1)执行:cd ~
2)执行vi .profile
3)在行尾加入一行:ulimit -n unlimited。