ガットリングツールにあるフィードメソッドを使用する負荷テストを実行しようとしています。現在、我々は600000件のレコードを持っている3.5ギガバイト周りサイズであるファイルを使用する場合、ガトリングは、以下のような例外で失敗: シミュレーションLoadTestSimulationはスレッド「メイン」java.lang.OutOfMemoryErrorを中...ギャングツールがGCオーバーヘッドの上限を超過しました
例外を開始しました:GCオーバーヘッドの上限が、java.util.Arrays.copyOf(Arrays.java:2367)の を超えました。 at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130) at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java :114) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:535) at java.lang.StringBuffer.append(StringBuffer.java:322)scala.io.BufferedSource $ BufferedLineIterator.hasNext(:72 BufferedSource.scala)でjava.io.BufferedReader.readLine(BufferedReader.java:382)でjava.io.BufferedReader.readLine(BufferedReader.java:351) でスケーラの$$ anon $ 11.hasNext(Iterator.scala:369) をscala.collection.Iterator $ classにあるscala.collection.Iterator $$ anon $ 11.hasNext(Iterator.scala:369) にある に配置します。 foreach(Iterator.scala:742) scala.collection.AbstractIterator.foreach(Iterator.scala:1194) scala.collection.generic.Growable $ class。$ plus $ plus $ eq(Growable.scala:59) scala.collection.immutable.VectorBuilder。$ plus $ plus $ eq(Vector.scala:732) (scala.collection.immutable.VectorBuilderにあります)$ plus $ plus $ eq(Vector.scala:708)(TraversableOnce.scala:308) at scala.collection.AbstractIterator.to(Iterator.scala:1194) at scala.collection.TraversableOnce $ class.toVector(TraversableOnce.scala:308) (Iterator.scala:1194) io.gatling.core.feeder.SeparatedValuesParser $$ anonfun $ parse $ 1.apply(SeparatedValuesParser.scala:34) at io.gatling。 io.gatling.core.util.IO $ .withSource(IO.scala:152) (io.gatling.core.feeder)の でcore.feeder.SeparatedValuesParser $$ anonfun $ parse $ 1.apply(SeparatedValuesParser.scala:33) .SeparatedValuesParser $ .parse(SeparatedValuesParser.scala:33) io.gatling.core.feeder.FeederSupport $$ anonfun $ separatedValues $ 1.apply(FeederSupp ort.scala:38) io.gatling.core.feeder.FeederSupport $$ anonfun $ separatedValues $ 1.applyで(FeederSupport.scala:38) io.gatling.core.feeder.FeederSupport $ class.feederBuilderで(FeederSupport。スケーラ:46) io.gatling.core.Predef $ .feederBuilder(Predef.scala:32) io.gatling.core.feeder.FeederSupport $ class.separatedValues(FeederSupport.scala:38) at io.gatling .core.Predef $ .separatedValues(Predef.scala:32) (io.gatling.core.feeder.FeederSupport)$ class.separatedValues(FeederSupport.scala:35) at io.gatling.core.Predef $ .separatedValues(Predef .scala:32) at io.gatling.core.feeder.FeederSupport $ class.tsv(FeederSupport.scala:32) :ギャトリングFAILED
これらのパラメータを使用するgradle gatlingタスクを使用しています。-PjvmArgs = -Dbroker = brokerhost:9092 -Dtopic = -Dusers = 100 -Dduration_in_mins = 2 -Dinput_file_name = -Psim = "LoadTestSimulation"
ヴァルのSCN =シナリオ( "デモ") .feed(TSV(inputFileName、真).circular) .exec(カフカ( "要求") .sendString、String)を
セットアップ( SCN .inject(constantUsersPerSec(ユーザー。中toDouble)(オーバーduration.toInt分)) //scn.inject(rampUsers(500)(200秒)) .protocols(kafkaConf)) }
任意の提案やヒントが、私たちは、ファイルを分割する必要がありますそのような大きなファイルを渡す代わりに複数のファイルに移動して実行すると、 このファイルは一度にメモリにロードされますか?
ファイルを小さなファイルに分割して実行しても意味がありますか? – user1459742
それはあなたのシナリオを知らないので、テストするものを分割して順次テストすることができるかどうかはわかりません。しかし、私は、多くのファイルを処理し、ロジックを書くことは、フィーダーが自分のフィーダーを書くことと同様の複雑さを持っていると考えていると思います。 – Teliatko