当前位置: 首页 > 知识库问答 >
问题:

Gatling工具抛出GC开销限制超出

鱼宜
2023-03-14

我正在尝试运行一个使用Gatling工具中的提要方法的负载测试。目前,当我们使用一个大小约为3.5GB的文件,其中包含600000条记录时,Gatling失败,例外情况如下:模拟LoadTest模拟开始...

线程“main”java中出现异常。lang.OutOfMemoryError:超过java的GC开销限制。util。数组。java上的copyOf(Arrays.java:2367)。lang.StringBuilder。java上的expandCapacity(AbstractStringBuilder.java:130)。lang.StringBuilder。确保java上的RecapacityInternal(AbstractStringBuilder.java:114)。lang.StringBuilder。在java中追加(AbstractStringBuilder.java:535)。lang.StringBuffer。在java上追加(StringBuffer.java:322)。伊奥。BufferedReader。java上的readLine(BufferedReader.java:351)。伊奥。BufferedReader。scala上的readLine(BufferedReader.java:382)。伊奥。BufferedSource$BufferedLineIterator。scala上的hasNext(BufferedSource.scala:72)。收集迭代器$$anon$11。hasNext(迭代器。scala:369)在scala。收集迭代器$$anon$11。hasNext(迭代器。scala:369)在scala。收集迭代器$class。scala的foreach(迭代器。scala:742)。收集抽象迭代器。scala的foreach(迭代器,scala:1194)。收集通用的美元可增长类$在scala加上$eq(可增长。scala:59)。收集不变的矢量生成器$在scala加上$eq(Vector.scala:732)。收集不变的矢量生成器$在scala加上$plus$eq(Vector.scala:708)。收集TraversableOnce$类。到scala(可遍历一次。scala:308)。收集抽象迭代器。到scala的(迭代器.scala:1194)。收集TraversableOnce$类。scala的toVector(TraversableOnce.scala:304)。收集抽象迭代器。io上的toVector(迭代器,scala:1194)。加特林。果心饲养员。SeparatedValuesParser$$anonfun$parse$1。在io上应用(SeparatedValuesParser.scala:34)。加特林。果心饲养员。SeparatedValuesParser$$anonfun$parse$1。在io上应用(SeparatedValuesParser.scala:33)。加特林。果心util。IO$。在IO上使用Source(IO.scala:152)。加特林。果心饲养员。SeparatedValuesParser$。在io上解析(SeparatedValuesParser.scala:33)。加特林。果心饲养员。FeederSupport$$anonfun$分离值$1。在io应用(FeederSupport.scala:38)。加特林。果心饲养员。FeederSupport$$anonfun$分离值$1。在io应用(FeederSupport.scala:38)。加特林。果心饲养员。FeederSupport$class。io的feederBuilder(FeederSupport.scala:46)。加特林。果心Predef$。io上的feederBuilder(Predef.scala:32)。加特林。果心饲养员。FeederSupport$class。io上的分离值(FeederSupport.scala:38)。加特林。果心Predef$。io上的分离值(Predef.scala:32)。加特林。果心饲养员。FeederSupport$class。io上的分离值(FeederSupport.scala:35)。加特林。果心Predef$。io上的分离值(Predef.scala:32)。加特林。果心饲养员。FeederSupport$class。tsv(FeederSupport.scala:32):加特林失败

我们正在使用gradle gatling任务,该任务使用这些参数--PjvmArgs=-Dbroker=brokerhost:9092-Dtopic=-Dusers=100-Dduration_in_mins=2-Dinput_file_name=-Psim=“LoadTestSimulation”。

val scn=场景(“演示”)。提要(tsv(inputFileName,true)。循环)。执行官(Kafka(“请求”)。sendString,String)

setUp(scn.inject(constantUsersPerSec(users.toDouble)在(duration.toInt分钟)))//scn.inject

任何建议或提示,我们是否应该将文件拆分为多个文件并运行,而不是传递这么大的文件,该文件是否会立即加载到内存中?

共有1个答案

朱锦
2023-03-14

您使用的是TSV,即标签分隔的文件馈送器。官方文件是这样说的:

这些内置函数返回RecordSeqFeederBuilder实例,这意味着整个文件被加载到内存中并被解析,因此生成的馈送器在模拟运行期间不会读取磁盘。

或者更好:

在内存中加载feeder文件会占用大量堆,与文件大小的比例为5到10倍。这是由于JVM的内部UTF-16字符编码和对象头开销造成的。如果内存对您来说是一个问题,那么您可能希望动态读取文件系统并构建自己的Feeder。

有关更多信息,请参阅CSV Feeders。

您“可以”做的是尝试增加足够的内存,以允许JVM和GC对内存中如此“巨大”的文件进行操作,我认为由于您的异常原因,这将无法正常工作(请参阅此处的更多信息)

所以我想你唯一的选择是编写自己的进纸器,它可以动态地从文件中读取数据。

 类似资料:
  • 使用当我尝试构建我的项目时,这种错误越来越多: 错误:任务“:app:CompiledEbugJavaWithJavac”执行失败。OutofMemoryError:超出GC开销限制 有什么办法解决这个问题吗?

  • 我正在尝试预处理一个大的txt文件(10G),并将其存储在二进制文件中以备将来使用。当代码运行时,速度会减慢,并以 异常线程"main"java.lang.OutOfMemoryError: GC开销限制超过 输入文件具有以下结构 这是我正在使用的代码: 基本上,它通过in文件并将数据存储到对象HMbicnt(这是一个哈希映射)。一旦在第二列中遇到新值,它应该将对象写入输出文件,释放内存并继续。

  • 我有一个Spark作业抛出“java.lang.OutOfMemoryError:GC开销限制超出”。 作业正在尝试处理4.5g的文件。 我尝试了以下spark配置:

  • 问题内容: 我正在尝试建立一个包含2台服务器的Gridgain集群。 使用 GridDataLoader 将.csv文件中的数据(100万至5000万个数据)加载到Gridgain 。 从加载的数据中找到最小值,最大值,平均值等, 当在Eclipse中作为独立应用程序运行时,我得到正确的输出。 但是,在建立集群(eclipse环境中的2个服务器中的2个节点+我的Eclipse环境中的1个节点)的同

  • 问题内容: 我在一个程序中创建了这个错误,该程序创建了几个(数十万)HashMap对象,每个对象都有几个(15-20)文本条目。这些字符串必须全部收集(不分解成较小的数量),然后再提交给数据库。 根据Sun的说法,该错误发生“如果在垃圾回收上花费了太多时间:如果在垃圾回收上花费了总时间的98%以上,而回收不到2%的堆,则将引发OutOfMemoryError。 ”。 显然,可以使用命令行将参数传递

  • 问题内容: 我收到 java.lang.OutOfMemoryError: 在Android 1.4上运行gradle时, 超出了GC开销限制 …这是我的依赖: 如何解决? 问题答案: 将此添加到您的android闭包(构建gradle): 这样可以解决您的问题。不过,如果您遇到问题,请参见以下链接 GC开销限制超出错误