Jetty HTTP Client - setMaxRequestHeadersSize resulting in java.lang.OutOfMemoryError (original) (raw)
Jetty version(s)
12.1.5
HTTP version
I believe this trace implies HTTP/1.1?
at org.eclipse.jetty.client.transport.internal.HttpChannelOverHTTP.send(HttpChannelOverHTTP.java:86)
Java version/vendor (use: java -version)
21
OS type/version
Linux
Description
I am seeing this exception when attempting to establish a WebSocket connnection.
2147483647 looks like Integer max?
Caused by: org.eclipse.jetty.websocket.api.exceptions.UpgradeException: org.eclipse.jetty.websocket.core.exception.UpgradeException: java.lang.OutOfMemoryError: Cannot reserve 2147483647 bytes of direct buffer memory (allocated: 1146600, limit: 1801453568)
at org.eclipse.jetty.websocket.common.JettyWebSocketFrameHandler.convertCause(JettyWebSocketFrameHandler.java:443)
at org.eclipse.jetty.websocket.client.WebSocketClient.lambda$connect$0(WebSocketClient.java:205)
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.postComplete(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(Unknown Source)
at org.eclipse.jetty.websocket.core.client.CoreClientUpgradeRequest.handleException(CoreClientUpgradeRequest.java:300)
at org.eclipse.jetty.websocket.core.client.CoreClientUpgradeRequest.onComplete(CoreClientUpgradeRequest.java:294)
at org.eclipse.jetty.client.transport.ResponseListeners.notifyComplete(ResponseListeners.java:354)
at org.eclipse.jetty.client.transport.ResponseListeners.notifyComplete(ResponseListeners.java:346)
at org.eclipse.jetty.client.transport.HttpReceiver.terminateResponse(HttpReceiver.java:454)
at org.eclipse.jetty.client.transport.HttpReceiver.terminateResponse(HttpReceiver.java:436)
at org.eclipse.jetty.client.transport.HttpReceiver.lambda$abort$0(HttpReceiver.java:534)
at org.eclipse.jetty.util.thread.SerializedInvoker$Link.run(SerializedInvoker.java:274)
at org.eclipse.jetty.util.thread.SerializedInvoker.run(SerializedInvoker.java:174)
at org.eclipse.jetty.client.transport.HttpReceiver.abort(HttpReceiver.java:508)
at org.eclipse.jetty.client.transport.HttpChannel.abortResponse(HttpChannel.java:174)
at org.eclipse.jetty.client.transport.HttpSender.terminateRequest(HttpSender.java:270)
at org.eclipse.jetty.client.transport.HttpSender.abortRequest(HttpSender.java:252)
at org.eclipse.jetty.client.transport.HttpSender.internalAbort(HttpSender.java:401)
at org.eclipse.jetty.client.transport.HttpSender$ContentSender.onFailure(HttpSender.java:633)
at org.eclipse.jetty.util.ExceptionUtil.callAndThen(ExceptionUtil.java:452)
at org.eclipse.jetty.util.IteratingCallback.doOnFailureOnCompleted(IteratingCallback.java:286)
at org.eclipse.jetty.util.IteratingCallback.processing(IteratingCallback.java:503)
at org.eclipse.jetty.util.IteratingCallback.iterate(IteratingCallback.java:354)
at org.eclipse.jetty.client.transport.HttpSender.send(HttpSender.java:86)
at org.eclipse.jetty.client.transport.internal.HttpChannelOverHTTP.send(HttpChannelOverHTTP.java:86)
at org.eclipse.jetty.client.transport.HttpChannel.send(HttpChannel.java:143)
How to reproduce?
I'm not fully sure yet, but I will update the issue as I gather more information...
My configuration looks like this, with no changes to the default buffer sizes.
config.setMaxFrameSize(32 * 1024); // 32 KiB
config.setAutoFragment(true);
config.setMaxBinaryMessageSize(Long.MAX_VALUE);
config.setMaxTextMessageSize(Long.MAX_VALUE);Updated:
Appears to be caused by my attempt to disable request header size restrictions
httpClient.setMaxRequestHeadersSize(Integer.MAX_VALUE);