[ https://issues.apache.org/jira/browse/HTTPASYNC-161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17097601#comment-17097601 ]
Michael Osipov commented on HTTPASYNC-161: ------------------------------------------ [~bentindall], tried on FreeBSD 11.3-RELEASE. Something is really really wrong here. After a few hunders attempts procstat shows thousands of open FDs. Every other invocation of an application exits with "Cannot allocate memory.". Then it completely stalls at "Attempt 2078..." and takes way longer than 10 ms to allocate another attempt. By then it has " 868 java 24961 k - rw------ 2 0 - -" more than 25 000 open FDs here. > HttpAsyncClient 5.0 file descriptor leak > ---------------------------------------- > > Key: HTTPASYNC-161 > URL: https://issues.apache.org/jira/browse/HTTPASYNC-161 > Project: HttpComponents HttpAsyncClient > Issue Type: Bug > Reporter: Ben Tindall > Priority: Major > Attachments: apacheleaktest.tar > > > It seems that HttpAsyncClient doesn't close all its file descriptors with the > close() operation. Consider the following test: > {code:java} > @Test > public void leakApache() throws Exception { > for (int i = 0; i < 10000; i++) { > CloseableHttpAsyncClient client = null; > try { > client = HttpAsyncClientBuilder.create().build(); > System.out.println(i); > } catch (Throwable e) { > e.printStackTrace(); > } finally { > if (client != null) > client.close(); > } > Thread.sleep(10); > } > Thread.sleep(300000); > } > {code} > After around 280 iterations I start seeing this error message > (java.io.IOException: *Too many open files*): > {code:java} > java.lang.IllegalStateException: Unexpected failure opening I/O selector > at > org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.<init>(AbstractSingleCoreIOReactor.java:60) > at > org.apache.hc.core5.reactor.SingleCoreIOReactor.<init>(SingleCoreIOReactor.java:81) > at > org.apache.hc.core5.reactor.DefaultConnectingIOReactor.<init>(DefaultConnectingIOReactor.java:71) > at > org.apache.hc.client5.http.impl.async.HttpAsyncClientBuilder.build(HttpAsyncClientBuilder.java:924) > at com.mimecast.micro.rest.BenTest.leakApache(BenTest.java:77) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) > at > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) > at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > at org.junit.runner.JUnitCore.run(JUnitCore.java:137) > at > com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) > at > com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) > at > com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) > at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) > Caused by: java.io.IOException: Too many open files > at sun.nio.ch.IOUtil.makePipe(Native Method) > at sun.nio.ch.KQueueSelectorImpl.<init>(KQueueSelectorImpl.java:84) > at > sun.nio.ch.KQueueSelectorProvider.openSelector(KQueueSelectorProvider.java:42) > at java.nio.channels.Selector.open(Selector.java:227) > at > org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.<init>(AbstractSingleCoreIOReactor.java:58) > ... 26 more {code} > If I run lsof i see around 10k files. These files do not get released until > the whole test closes. > Is there something I'm missing? > Thanks, > Ben -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org