browserup / browserup-proxy

BrowserUp Proxy is a free utility to watch, test, and manipulate web application network traffic and performance.
https://browserup.com
Apache License 2.0
164 stars 41 forks source link

OutOfMemoryError is getting during ProxyToServerConnection #291

Closed Pareshdanej closed 4 years ago

Pareshdanej commented 4 years ago
2.1.1

Issue Description: We are facing the outOfMemory issue while running the embeded browser up proxy in docker container. Tests are running in parallel threads, each test-group is started in separate docker container, each testGroup has its own proxy. Requesting you to please check.

Please let me know if any other information is required

2020-07-09 11:53:46.147 ERROR 76 --- [oServerWorker-6] o.l.proxy.impl.ProxyToServerConnection : (AWAITING_CHUNK) [id: 0x7cb39348, L:/172.18.0.6:60256 - R:ui-automation-matching--pi13.ilocpc108.corp.amdocs.com/10.236.208.73:443]: Caught an exception on ProxyToServerConnection

java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:3332) ~[na:1.8.0_252] at java.lang.StringCoding.safeTrim(StringCoding.java:89) ~[na:1.8.0_252] at java.lang.StringCoding.decode(StringCoding.java:230) ~[na:1.8.0_252] at java.lang.String.(String.java:463) ~[na:1.8.0_252] at java.lang.String.(String.java:515) ~[na:1.8.0_252] at com.browserup.bup.util.BrowserUpHttpUtil.getContentAsString(BrowserUpHttpUtil.java:209) ~[browserup-proxy-core-2.1.1.jar!/:na] at com.browserup.bup.filters.HarCaptureFilter.captureResponseContent(HarCaptureFilter.java:497) ~[browserup-proxy-core-2.1.1.jar!/:na] at com.browserup.bup.filters.HarCaptureFilter.serverToProxyResponse(HarCaptureFilter.java:278) ~[browserup-proxy-core-2.1.1.jar!/:na] at com.browserup.bup.filters.BrowserUpHttpFilterChain.serverToProxyResponse(BrowserUpHttpFilterChain.java:125) ~[browserup-proxy-core-2.1.1.jar!/:na] at org.littleshoot.proxy.impl.ClientToProxyConnection.respond(ClientToProxyConnection.java:418) ~[littleproxy-2.0.0-beta-5.jar!/:na] at org.littleshoot.proxy.impl.ProxyToServerConnection.respondWith(ProxyToServerConnection.java:546) ~[littleproxy-2.0.0-beta-5.jar!/:na] at org.littleshoot.proxy.impl.ProxyToServerConnection.readHTTPChunk(ProxyToServerConnection.java:272) ~[littleproxy-2.0.0-beta-5.jar!/:na] at org.littleshoot.proxy.impl.ProxyConnection.readHTTP(ProxyConnection.java:155) ~[littleproxy-2.0.0-beta-5.jar!/:na] at org.littleshoot.proxy.impl.ProxyConnection.read(ProxyConnection.java:122) ~[littleproxy-2.0.0-beta-5.jar!/:na] at org.littleshoot.proxy.impl.ProxyToServerConnection.read(ProxyToServerConnection.java:229) ~[littleproxy-2.0.0-beta-5.jar!/:na] at org.littleshoot.proxy.impl.ProxyConnection.channelRead0(ProxyConnection.java:582) ~[littleproxy-2.0.0-beta-5.jar!/:na] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[netty-transport-4.1.29.Final.jar!/:4.1.29.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[netty-transport-4.

Browser Chrome: Version : 83 docker pull selenium/standalone-chrome-debug:latest (DIGEST:sha256:53812c3d01622148e9ccd79e598c3740804dbfd51594ae592bac5a14380b595e)

Same issue was raised on browser mob proxy : https://github.com/lightbody/browsermob-proxy/issues/702

ericbeland commented 4 years ago

We are rewriting this area and replacing our depdencies. Please reopen after the next major release if this is still occurring. Thanks!

sskorol commented 2 years ago

@ericbeland it's still happening on 2.1.2

[ERROR 2022-01-17T13:24:56,828 org.littleshoot.proxy.impl.ProxyToServerConnection] (LittleProxy-551-ProxyToServerWorker-0) (AWAITING_CHUNK) [id: 0xc02ae6a4, L:/172.19.0.2:48308 - R:edgedl.me.gvt1.com/34.104.35.123:80]: Caught an exception on ProxyToServerConnection java.lang.OutOfMemoryError: Java heap space

Note that I also see the following exceptions in log:

[ERROR 2022-01-17T13:24:52,578 io.netty.util.concurrent.DefaultPromise.rejectedExecution] (LittleProxy-549-ClientToProxyWorker-1) Failed to submit a listener notification task. Event loop shut down? java.util.concurrent.RejectedExecutionException: event executor terminated
    at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:926) ~[netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:353) ~[netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:346) ~[netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:828) ~[netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:818) ~[netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.DefaultPromise.safeExecute(DefaultPromise.java:841) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:498) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:183) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at org.littleshoot.proxy.impl.ProxyConnection.disconnect(ProxyConnection.java:473) [littleproxy-2.0.0-beta-5.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.disconnected(ClientToProxyConnection.java:528) [littleproxy-2.0.0-beta-5.jar:?]
    at org.littleshoot.proxy.impl.ProxyConnection.channelInactive(ProxyConnection.java:616) [littleproxy-2.0.0-beta-5.jar:?]
    at org.littleshoot.proxy.impl.ClientToProxyConnection.channelInactive(ClientToProxyConnection.java:55) [littleproxy-2.0.0-beta-5.jar:?]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:81) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.handler.timeout.IdleStateHandler.channelInactive(IdleStateHandler.java:277) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:389) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:354) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:1106) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1405) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:901) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe$8.run(AbstractChannel.java:818) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.50.Final.jar:4.1.50.Final]
    at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]

But it's hard to find a relationship as tests are executed concurrently.