Tengo una aplicación java que funciona bien (en Ubuntu 10.04) durante unas horas hasta que golpea "java.net.SocketException: Demasiados archivos abiertos". El código para Sender.java se puede encontrar herejava.net.SocketException: Demasiados archivos abiertos
¿Es porque creo una nueva instancia de HttpPut
y HttpPost
para cada hilo? Estoy usando Apache Commons HTTPClient 4.
Aquí está el registro de excepciones:
java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:414)
at java.net.Socket.connect(Socket.java:544)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:133)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
at com.marketplace.io.Sender.doBasicHttpPost(Sender.java:434)
at com.marketplace.io.Sender.appVisualExists(Sender.java:223)
at com.marketplace.io.Sender.addVisualToCollection(Sender.java:350)
at com.marketplace.service.ImageThread.run(ImageThread.java:136)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
¿Alguna vez se apaga el httpclient.? –
No tengo tiempo para revisar todo el código (lo siento), pero parece que (continuamente) no cierras las conexiones que abres. –
@The Elite Gentleman- No, yo no. No estoy seguro de cómo hacer eso. Parte de la documentación para HTTPClient es inexistente. – Raunak