Tomcat: Too many open files
Posted by Edmund Haselwanter on Friday, March 13, 2009
the symptom
If tomcat just respondes with HTTP 500 and you find something like
1 2 org.apache.tomcat.jni.Error: Too many open files 3 at org.apache.tomcat.jni.Socket.accept(Native Method) 4 at org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:1110) 5 at java.lang.Thread.run(Thread.java:619) 6 Mar 12, 2009 12:01:34 PM org.apache.tomcat.util.net.AprEndpoint$Acceptor run 7 SEVERE: Socket accept failed
in catalina.out
then you might have too many open file handles.
Too be sure … lsof and ulimit are you friends
use
ulimit -a to see you current configuration:
1 2 3 $ ulimit -a 4 core file size (blocks, -c) 0 5 data seg size (kbytes, -d) unlimited 6 scheduling priority (-e) 0 7 file size (blocks, -f) unlimited 8 pending signals (-i) 13664 9 max locked memory (kbytes, -l) 32 10 max memory size (kbytes, -m) unlimited 11 open files (-n) 1024 12 pipe size (512 bytes, -p) 8 13 POSIX message queues (bytes, -q) 819200 14 real-time priority (-r) 0 15 stack size (kbytes, -s) 8192 16 cpu time (seconds, -t) unlimited 17 max user processes (-u) 13664 18 virtual memory (kbytes, -v) unlimited 19 file locks (-x) unlimited
so
open files (-n) 1024
shows there are 1024 possible open file handles per process.
ulimit -n <value> lets you set the value. You might increase it to e.g. 4096. But be sure there is not something in you code which consumes too much file handles. And don’t forget to restart the process after tweaking with ulimit.
to check for the current open file handles use lsof
lsof |grep tomcat shows you all open handles from tomcat (or use grep java)
to get a number to compare with you settings wc comes in handy :-)
1 2 $ lsof |grep tomcat|wc -l 3 136