Hi all,
During a load teste we've noticed that JMeter was presenting a response
time much bigger than the tested component. Taking some thread dumps we
found that on a total of 200 threads, 170 were locked at some javascript
object.
This was due to the usage of a JavaScript function in the body of the HTTP
payload. Do we really have to use a shared object for javascript and then
lock it causing this contention?
Bellow, my thread dump:
"Thread XXXX 1-200" prio=10 tid=0x00002aaab105e800 nid=0x34ec waiting for
monitor entry [0x000000005a3ff000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.jmeter.functions.JavaScript.execute(JavaScript.java:65)
- waiting to lock <0x000000070158e538> (a
org.apache.jmeter.functions.JavaScript)
at
org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:146)
at
org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:120)
at
org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101)
at
org.apache.jmeter.testelement.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:274)
at org.apache.jmeter.config.Argument.getValue(Argument.java:146)
at
org.apache.jmeter.protocol.http.util.HTTPArgument.getEncodedValue(HTTPArgument.java:199)
at
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sendEntityData(HTTPHC4Impl.java:1168)
at
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.handleMethod(HTTPHC4Impl.java:422)
at
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:296)
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1105)
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1094)
at
org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:429)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:257)
at java.lang.Thread.run(Thread.java:745)
Thanks,
Daniel
During a load teste we've noticed that JMeter was presenting a response
time much bigger than the tested component. Taking some thread dumps we
found that on a total of 200 threads, 170 were locked at some javascript
object.
This was due to the usage of a JavaScript function in the body of the HTTP
payload. Do we really have to use a shared object for javascript and then
lock it causing this contention?
Bellow, my thread dump:
"Thread XXXX 1-200" prio=10 tid=0x00002aaab105e800 nid=0x34ec waiting for
monitor entry [0x000000005a3ff000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.jmeter.functions.JavaScript.execute(JavaScript.java:65)
- waiting to lock <0x000000070158e538> (a
org.apache.jmeter.functions.JavaScript)
at
org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:146)
at
org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:120)
at
org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101)
at
org.apache.jmeter.testelement.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:274)
at org.apache.jmeter.config.Argument.getValue(Argument.java:146)
at
org.apache.jmeter.protocol.http.util.HTTPArgument.getEncodedValue(HTTPArgument.java:199)
at
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sendEntityData(HTTPHC4Impl.java:1168)
at
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.handleMethod(HTTPHC4Impl.java:422)
at
org.apache.jmeter.protocol.http.sampler.HTTPHC4Impl.sample(HTTPHC4Impl.java:296)
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerProxy.sample(HTTPSamplerProxy.java:74)
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1105)
at
org.apache.jmeter.protocol.http.sampler.HTTPSamplerBase.sample(HTTPSamplerBase.java:1094)
at
org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:429)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:257)
at java.lang.Thread.run(Thread.java:745)
Thanks,
Daniel