Estou tendo que desenvolver uma aplicação que precisa usar threads para abrir sockets e essas threads também fazem atualizações no banco de dados, ou seja, cada uma tem uma conexão.
Quando aumento o número de threads na aplicação tenho que aumentar o número de conexões com o banco. Quando chego a abrir por volta de 800 a 1000 threads recebo esta exception:
java.lang.Throwable: java.net.SocketException: Too many open files
at br.com.billing.request.RequestSDPThread.run(RequestSDPThread.java:163)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:388)
at java.net.Socket.<init>(Socket.java:362)
at java.net.Socket.<init>(Socket.java:209)
at br.com.http.Request.connect(Request.java:143)
at br.com.client.http.ClientSDPRequest.send(ClientSDPRequest.java:115)
at br.com.client.http.ClientSDPRequest.reserveAndCommit(ClientSDPRequest.java:140)
at br.com.request.RequestSDPThread.run(RequestSDPThread.java:151)
... 3 more
Isso acontece porque tenho muitos sockets abertos, e porque tenho no datasource mais de 500 conexões, então, gostaria de saber se isso é uma limitação ou se é questão de configuração?
Estou usando o tomcat( com dbcp ), jpa e spring.
E esta aplicação precisa manter mais de 500 transações por segundo para um servidor apache, por isso faço com threads as minhas requisções.