【问题标题】:Gatling - GC overhead limit exceededGatling - 超过 GC 开销限制
【发布时间】:2020-09-21 19:59:29
【问题描述】:

我在尝试启动测试时收到以下错误。 该测试包括一个大型馈线,该馈线循环 620,000 条,并在馈线中包含 120 个项目的地图。

Uncaught exception when running trip_dte: java.lang.OutOfMemoryError: GC overhead limit exceeded
[error] sbt.ForkMain$ForkError: java.lang.OutOfMemoryError: GC overhead limit exceeded
[error]     at scala.collection.immutable.HashMap$HashTrieMap.updated0(HashMap.scala:358)
[error]     at scala.collection.immutable.HashMap.$plus(HashMap.scala:62)
[error]     at scala.collection.immutable.HashMap.$plus(HashMap.scala:36)
[error]     at scala.collection.mutable.MapBuilder.$plus$eq(MapBuilder.scala:29)
[error]     at scala.collection.mutable.MapBuilder.$plus$eq(MapBuilder.scala:25)
[error]     at scala.collection.generic.Growable.$anonfun$$plus$plus$eq$1(Growable.scala:59)
[error]     at scala.collection.generic.Growable$$Lambda$44/1950093417.apply(Unknown Source)
[error]     at scala.collection.IndexedSeqOptimized.foreach(IndexedSeqOptimized.scala:32)
[error]     at scala.collection.IndexedSeqOptimized.foreach$(IndexedSeqOptimized.scala:29)
[error]     at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:38)
[error]     at scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:59)
[error]     at scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:50)
[error]     at scala.collection.mutable.MapBuilder.$plus$plus$eq(MapBuilder.scala:25)
[error]     at scala.collection.generic.GenMapFactory.apply(GenMapFactory.scala:48)

【问题讨论】:

    标签: scala gatling


    【解决方案1】:

    您没有提供足够的信息来找出您的问题。

    可能的问题:

    • 您正在使用急切的馈线(大型 CSV 等馈线在现代 Gatling 版本中很懒惰,但不知道您使用的是哪个 Gatling 版本或哪种类型的馈线)。
    • 您的系统负载不足或您的带宽无法处理您尝试生成的负载,并且您的虚拟用户堆积在内存中(无法完成他们的旅程并且没有虚拟用户不断到达)。

    【讨论】:

    • 我正在使用如下迭代器馈送器 val timeFeeder = (for (i (current +i*1000).toString())其中 map 有 120 个项目 ("timestamp1"->(current+(i*1000)+1000).toString())......"timestamp120"->(current+(i*1000)+120000) .toString())}) 。当我将上述馈线用于 10 个请求时,它工作正常。我必须在 1 小时内每秒发送 150 个请求,才能看到应用程序可以处理负载。每次请求都必须不同。如果我有一个模板,上面的 120 个时间戳是使用 ELF 预定义的,那么一切正常。
    • 不,那不是迭代器。 0 until 620000 是一个 Range (scala-lang.org/api/2.12.2/scala/collection/immutable/Range.html),它是一个具体的 Seq。您的整个数据库存都在内存中。
    • 我该如何实现,因为我需要 120 个时间戳,相差 1 秒,并且每个请求都必须不同,以便我可以将其提供给 json 模板。我尝试制作 json 并通过字符串主体发送,这也需要时间来处理 150 个请求,这些请求同时发送 1 小时
    • 恕我直言,您需要的超出了 SOF 所能做的。您需要一些咨询时间,让与您一起工作的人了解您的用例并为您编写代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多