Hello! I use Throughput Shaping Timer 2.5. Sometimes thread worked extra time after test. End of test is a rampUp from big RPS to zero - it is root cost of current problem.
Zero rps is root cost of hang.
Thread dump of JMeter for this "extra time" moment:
"put2map-ThreadStarter 3-421" #7127 prio=5 os_prio=31 cpu=5920.67ms elapsed=23607.27s tid=0x00007fa50896f800 nid=0x20dc07 in Object.wait() [0x0000000379644000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java...@11.0.14/Native Method)
- waiting on <no object reference available>
at kg.apc.jmeter.timers.VariableThroughputTimer.delay(VariableThroughputTimer.java:98)
- waiting to re-lock in wait() <merged>(a kg.apc.jmeter.timers.VariableThroughputTimer)
at org.apache.jmeter.threads.JMeterThread.delay(JMeterThread.java:982)
at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:554)
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...@11.0.14/Thread.java:829)
Locked ownable synchronizers: - None
Variables for this "extra time":
rps = 0.0;
cndDelayd = 2;
this values provide this effect:
int delayMs = getDelay(millisSinceLastSecond); = return (int) (1 + 1000.0 * (cntDelayed + 1) / rps); = return (int) (1 + 1000.0 * (2 + 1) / 0.0); = MAX_INT
And delayMs = MAX_INT;