On Wed, 2022-05-18 at 16:26 +0200, Michael Osipov wrote:
> Am 2022-05-18 um 15:23 schrieb Oleg Kalnichevski:
> > Hi Michael
> >
> > Could you please try the latest 1.8, 11, and 17 JDKs and see if the
> > issue is consistently reproducible across all versions or is
> > specific
> > to some.
>
> I see the failure consistently on all Java versions:
...
> The server has plenty of resources and is mostly idle. I guess the
> thread per process limit is reached. I don't understand why it needs
> to
> scale that high for the test.
>
> Do you need a thread dump at the time of the OOM?
>
> M
>
Could you please run this test with HttpCore master and let me know if
it exhibits the same issue?
---
import org.apache.hc.core5.http.impl.bootstrap.HttpAsyncServer;
import org.apache.hc.core5.http.protocol.UriPatternMatcher;
import org.apache.hc.core5.http2.HttpVersionPolicy;
import org.apache.hc.core5.http2.impl.nio.bootstrap.H2ServerBootstrap;
import org.apache.hc.core5.io.CloseMode;
import org.apache.hc.core5.reactor.IOReactorConfig;
import org.apache.hc.core5.util.Timeout;
import org.junit.Rule;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.Extensions;
import org.junit.jupiter.migrationsupport.rules.ExternalResourceSupport;
import org.junit.rules.ExternalResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Extensions({@ExtendWith({ExternalResourceSupport.class})})
public class H2ServerTest {
private final Logger log = LoggerFactory.getLogger(getClass());
private static final Timeout TIMEOUT = Timeout.ofSeconds(30);
private HttpAsyncServer server;
@Rule
public ExternalResource serverResource = new ExternalResource() {
@Override
protected void before() throws Throwable {
log.debug("Starting up test server");
server = H2ServerBootstrap.bootstrap()
.setLookupRegistry(new UriPatternMatcher<>())
.setVersionPolicy(HttpVersionPolicy.NEGOTIATE)
.setIOReactorConfig(
IOReactorConfig.custom()
.setSoTimeout(TIMEOUT)
.build())
.setStreamListener(LoggingHttp1StreamListener.INSTANCE_SERVER)
.setStreamListener(LoggingH2StreamListener.INSTANCE)
.setIOSessionDecorator(LoggingIOSessionDecorator.INSTANCE)
.setExceptionCallback(LoggingExceptionCallback.INSTANCE)
.setIOSessionListener(LoggingIOSessionListener.INSTANCE)
.register("*", () -> new EchoHandler(2048))
.create();
}
@Override
protected void after() {
log.debug("Shutting down test server");
if (server != null) {
server.close(CloseMode.GRACEFUL);
}
}
};
@RepeatedTest(5000)
public void testSequentialRequests() throws Exception {
server.start();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]