Using JMeter 5.4.1 and JDK 11 in Non-GUI mode, running at 40 Thread at 5 requests/sec.
- All Listeners Off
- Disabled all assertions, relying on application logs
- Groovy used as scripting language in JSR223, using to emulate Pacing between requests
- Heap Size increased to 12 GB
After around 40 mins or sometime 70 mins, JMeter stops generating load as seen on Web Server logs. I ran Visual VM on JMeter machine, hooked into JMeter process and took a Thread Dump.
Majority of my threads are in Monitor State
Log as below: '''
"Script11 - GetRequest 11-1" #61 prio=5 os_prio=0 cpu=13390.63ms elapsed=4266.73s tid=0x000001d1599d9800 nid=0xee0 waiting for monitor entry [0x000000ca924fe000] java.lang.Thread.State: BLOCKED (on object monitor) at java.io.PrintStream.println(java.base@11.0.11/PrintStream.java:881) - waiting to lock <0x0000000500857638> (a java.io.PrintStream) at org.apache.jmeter.reporters.Summariser.formatAndWriteToLog(Summariser.java:329) at org.apache.jmeter.reporters.Summariser.sampleOccurred(Summariser.java:208) at org.apache.jmeter.threads.ListenerNotifier.notifyListeners(ListenerNotifier.java:58) at org.apache.jmeter.threads.JMeterThread.notifyListeners(JMeterThread.java:1024) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:579) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) at java.lang.Thread.run(java.base@11.0.11/Thread.java:834)
Locked ownable synchronizers: - None
"0x0000000500857638" is Locked on
"Script09 - GetRequest9 9-2" #55 prio=5 os_prio=0 cpu=13562.50ms elapsed=4266.74s tid=0x000001d1599d5000 nid=0x13e0 runnable [0x000000ca91efe000] java.lang.Thread.State: RUNNABLE at java.io.FileOutputStream.writeBytes(java.base@11.0.11/Native Method) at java.io.FileOutputStream.write(java.base@11.0.11/FileOutputStream.java:354) at java.io.BufferedOutputStream.flushBuffer(java.base@11.0.11/BufferedOutputStream.java:81) at java.io.BufferedOutputStream.flush(java.base@11.0.11/BufferedOutputStream.java:142) - locked <0x0000000500857660> (a java.io.BufferedOutputStream) at java.io.PrintStream.write(java.base@11.0.11/PrintStream.java:561) - locked <0x0000000500857638> (a java.io.PrintStream) at sun.nio.cs.StreamEncoder.writeBytes(java.base@11.0.11/StreamEncoder.java:233) at sun.nio.cs.StreamEncoder.implFlushBuffer(java.base@11.0.11/StreamEncoder.java:312) at sun.nio.cs.StreamEncoder.flushBuffer(java.base@11.0.11/StreamEncoder.java:104) - locked <0x00000005008577b8> (a java.io.OutputStreamWriter) at java.io.OutputStreamWriter.flushBuffer(java.base@11.0.11/OutputStreamWriter.java:181) at java.io.PrintStream.write(java.base@11.0.11/PrintStream.java:606) - locked <0x0000000500857638> (a java.io.PrintStream) at java.io.PrintStream.print(java.base@11.0.11/PrintStream.java:745) at java.io.PrintStream.println(java.base@11.0.11/PrintStream.java:882) - locked <0x0000000500857638> (a java.io.PrintStream) at org.apache.jmeter.reporters.Summariser.formatAndWriteToLog(Summariser.java:329) at org.apache.jmeter.reporters.Summariser.sampleOccurred(Summariser.java:208) at org.apache.jmeter.threads.ListenerNotifier.notifyListeners(ListenerNotifier.java:58) at org.apache.jmeter.threads.JMeterThread.notifyListeners(JMeterThread.java:1024) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:579) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) at java.lang.Thread.run(java.base@11.0.11/Thread.java:834)
Locked ownable synchronizers: - None
Heap Utilization is around 1.5GB, allocation is 12 GB CPU Utilization on host machine is around 15% Any suggestions on how to avoid the JMeter threads getting blocked ?
Thanks.