Jvm 盖特林没记性了,有什么建议吗?

Jvm 盖特林没记性了,有什么建议吗?,jvm,gatling,Jvm,Gatling,我正在进行一项耐力测试,这是我最初计划的,为期五天。 然而,大约13.5小时后,在我的一个测试应用程序NGINX崩溃,我开始出现大量超时后,测试与OOM崩溃: 22:33:59 > i.g.h.c.i.RequestTimeoutException: Request timeout to api.rnd. 22028 (32.23%) 22:33:59 .com/54.191.252.45:443 after 60000 ms 22:33:59 > i.g.h.c.i.Req

我正在进行一项耐力测试,这是我最初计划的,为期五天。 然而,大约13.5小时后,在我的一个测试应用程序NGINX崩溃,我开始出现大量超时后,测试与OOM崩溃:

22:33:59  > i.g.h.c.i.RequestTimeoutException: Request timeout to api.rnd.  22028 (32.23%)
22:33:59  .com/54.191.252.45:443 after 60000 ms
22:33:59  > i.g.h.c.i.RequestTimeoutException: Request timeout to api.rnd.  21957 (32.12%)
22:33:59  .com/34.210.130.50:443 after 60000 ms
22:33:59  > i.g.h.c.i.RequestTimeoutException: Request timeout to api.rnd.  21912 (32.06%)
22:33:59  .com/100.20.123.44:443 after 60000 ms
请注意,在测试的高峰期,我可能有大约8K个并发用户

测试通过c5.xlarge上的Jenkins运行,内存JVM参数如下:

-Xms2g -Xmx3g
这是我得到的一个例外:

22:33:59  java.lang.OutOfMemoryError: Java heap space
22:33:59  20:33:55.543 [gatling-http-1-3][WARN ][DefaultPromise.java:580] i.n.u.c.DefaultPromise - An exception was thrown by io.gatling.http.client.impl.DefaultHttpClient$$Lambda$558/0x000000084054a840.operationComplete()
22:33:59  java.lang.OutOfMemoryError: Java heap space
22:33:59    at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:305)
22:33:59    at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:157)
22:33:59    at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:150)
22:33:59    at io.gatling.http.client.impl.DefaultHttpClient.openNewChannelRec(DefaultHttpClient.java:629)
22:33:59    at io.gatling.http.client.impl.DefaultHttpClient.openNewChannel(DefaultHttpClient.java:603)
22:33:59    at io.gatling.http.client.impl.DefaultHttpClient.sendTxWithNewChannel(DefaultHttpClient.java:493)
22:33:59    at io.gatling.http.client.impl.DefaultHttpClient.lambda$sendTx$2(DefaultHttpClient.java:378)
22:33:59    at io.gatling.http.client.impl.DefaultHttpClient$$Lambda$558/0x000000084054a840.operationComplete(Unknown Source)
22:33:59    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
22:33:59    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551)
22:33:59    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490)
22:33:59    at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:183)
22:33:59    at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:35)
22:33:59    at io.gatling.http.client.impl.DefaultHttpClient.sendTx(DefaultHttpClient.java:360)
22:33:59    at io.gatling.http.client.impl.DefaultHttpClient.sendRequest(DefaultHttpClient.java:263)
22:33:59    at io.gatling.http.engine.HttpEngine.executeRequest(HttpEngine.scala:149)
22:33:59    at io.gatling.http.engine.tx.HttpTxExecutor.$anonfun$execute$1(HttpTxExecutor.scala:142)
22:33:59    at io.gatling.http.engine.tx.HttpTxExecutor.$anonfun$execute$1$adapted(HttpTxExecutor.scala:126)
22:33:59    at io.gatling.http.engine.tx.HttpTxExecutor$$Lambda$686/0x0000000840623840.apply(Unknown Source)
22:33:59    at io.gatling.http.engine.tx.HttpTxExecutor.executeWithCache(HttpTxExecutor.scala:53)
22:33:59    at io.gatling.http.engine.tx.HttpTxExecutor.execute(HttpTxExecutor.scala:126)
22:33:59    at io.gatling.http.engine.tx.HttpTxExecutor.execute(HttpTxExecutor.scala:120)
22:33:59    at io.gatling.http.action.HttpRequestAction.$anonfun$sendRequest$1(HttpRequestAction.scala:67)
22:33:59    at io.gatling.http.action.HttpRequestAction.$anonfun$sendRequest$1$adapted(HttpRequestAction.scala:59)
22:33:59    at io.gatling.http.action.HttpRequestAction$$Lambda$685/0x0000000840623040.apply(Unknown Source)
22:33:59    at io.gatling.commons.validation.Success.map(Validation.scala:45)
22:33:59    at io.gatling.http.action.HttpRequestAction.sendRequest(HttpRequestAction.scala:59)
22:33:59    at io.gatling.core.action.RequestAction.$anonfun$execute$1(Action.scala:100)
22:33:59    at io.gatling.core.action.RequestAction$$Lambda$660/0x0000000840609040.apply(Unknown Source)
22:33:59    at io.gatling.commons.validation.Success.flatMap(Validation.scala:46)
22:33:59    at io.gatling.core.action.RequestAction.execute(Action.scala:97)
22:33:59    at io.gatling.core.action.RequestAction.execute$(Action.scala:96)
22:33:59  20:33:55.546 [gatling-http-1-6][ERROR][HttpAppHandler.java:230] i.g.h.c.i.HttpAppHandler - Fatal error
22:33:59  java.lang.OutOfMemoryError: Java heap space
原因可能是60秒超时?这是我没有更改的默认参数。
如有任何建议,将不胜感激,谢谢

您在会话中存储了哪些内容?有时,我的脚本中出现了问题,我大量使用了.findAll来处理成千上万的响应,并用大量数据填充了我的会话。在8k用户中复制这种情况,很快就会遇到麻烦。解决方案是在完成会话后手动将该数据从会话中删除。8K每个并发用户都有自己的会话?根据会话中存储的内容,您可能没有足够的内存。就这么简单。否则,您可以启用GC日志记录并了解发生了什么,但是除非您对GC有一些基本的了解,否则这将不是一件愉快的事情。我建议您使用visualvm附加到有问题的流程。它可以让你很好地了解什么在使用你的记忆。