Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

При запуске прилоежния Too many open files

При запуске jettyHttpclient выходит ошибка java.io.IOException: Too many open files
думаю проблема не в jetty, а в том что открыто много файлов и не закрыто, ни где в приложении не открываются файлы, как можно отследить и узнать кто их открывает на Linuxe
как решить эту проблему, у меня открытых файлов программой 1300 из них 1000 Это pipe и anon_inode, что это и для чего кто их должен закрывать
09-06-2016 11:54:19.281 MSK|WARN |WebContainer : 1|org.eclipse.jetty.util.component.AbstractLifeCycle|FAILED org.eclipse.jetty.client.HttpClient@9385cdee: java.io.IOException: Too many open files java.io.IOException: Too many open files at sun.nio.ch.IOUtil.makePipe(Native Method) ~[na:1.7.0] at sun.nio.ch.EPollSelectorImpl.(EPollSelectorImpl.java:78) ~[na:1.7.0] at sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:49) ~[na:1.7.0] at java.nio.channels.Selector.open(Selector.java:239) ~[na:1.7.0] at org.eclipse.jetty.io.nio.SelectorManager$SelectSet.(SelectorManager.java:416) ~[jetty-io-7.6.15.v20140411.jar:7.6.15.v20140411] at org.eclipse.jetty.io.nio.SelectorManager.doStart(SelectorManager.java:261) ~[jetty-io-7.6.15.v20140411.jar:7.6.15.v20140411] at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) ~[jetty-util-7.6.15.v20140411.jar:7.6.15.v20140411] at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:81) ~[jetty-util-7.6.15.v20140411.jar:7.6.15.v20140411] at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) ~[jetty-util-7.6.15.v20140411.jar:7.6.15.v20140411] at org.eclipse.jetty.util.component.AggregateLifeCycle.doStart(AggregateLifeCycle.java:81) ~[jetty-util-7.6.15.v20140411.jar:7.6.15.v20140411] at org.eclipse.jetty.client.HttpClient.doStart(HttpClient.java:433) ~[jetty-client-7.6.15.v20140411.jar:7.6.15.v20140411] at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) ~[jetty-util-7.6.15.v20140411.jar:7.6.15.v20140411] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) [spring-core-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) [spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) [spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) [spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) [spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) [spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) [spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE]


Ответ

По умолчанию дается возможность открыть 1024 файловых дескриптора (в том числе и сокетов). Но если сильно хочется, можно "подкрутить параметры" - ulimit -n <нужное-кол-во>. Правда запускать нужно от имени рута.
Но это не исправление ошибки, а "сокрытие".
Но так как это java, то хоть и гарантируют, что объекты будут уничтожены, но никто не гарантирует когда. Поэтому, если хотите, что бы все было правильно - самостоятельно освобождайте ресурсы, которые Вы захватываете. Либо переходите на нормальные языки, где есть RAII и все работает "из-коробки".
По ссылке ниже есть разбор похожего примера, где вызывают закрытие потока.
https://stackoverflow.com/questions/5656458/java-net-socketexception-too-many-open-files

Комментариев нет:

Отправить комментарий