Hello jmeter team ! I'm currently running Jmeter 5.1.1 and I have found something strange with remote batching. When using mode=DiskStore or mode=StrippedDiskStore, I can't find any difference in term of temp disk usage or network used to transmit data to master at the end of the test. The goal of StrippedDiskStore is to strip response data from serialized flow no ? So it just don't work. - Remote jmeter server temp files have the same size /tmp/SerialisedSampleSender119928309885821559.ser - Remote jmeter server temp files have response data - At the end of the test, total data sent to the master use the same mbit rate during the same time. The bug is really easy to reproduce :) Have a try, and tell me ! Cheers
I perform more tests and my conclusion is that the bug is located into the [Check] Retrieve All Embedded Resources option. When this option is enabled, the StrippingSampler is not working, and amout of data transmitted to the master is indeed insane. Here are my result with the same Test Plan and some jp@gc graph listeners: This are the MB size transmitted over lan to the jmeter master: - Without "Retrieve All Embedded Resources" -- mode=Batch : 583 MB -- mode=StrippedBatch : 4 MB -- mode=DiskStore : 547 MB -- mode=StrippedDiskStore : 48 MB - With the option "Retrieve All Embedded Resources" -- mode=Batch : 2090 MB -- mode=StrippedBatch : 2010 MB -- mode=DiskStore : 2150 MB -- mode=StrippedDiskStore : 2160 MB For me, all the resources automatically retreived with the option are not Stripped correctly, the problem is the same with Batch or DiskStore mode. Tested on Jmeter 5.1.1 + Java 8
Can you give more information about: * the plan you are using (it would be best to have a minimal test, that we could use) * where you specified the mode and how * where the results failures or normal responses I have tried to reproduce it and in my setup (setting the mode on the controlling server) it worked and the controlled node saved the headers only.
Created attachment 36726 [details] jmeter.properties of master jmeter
Created attachment 36727 [details] test plan to run without and with "retreive all embedded resources"
Hello Felix, Thanks for the quick reply :) Okay here is my setup, let's hope you will be able to reproduce the bug :) 1 - Start one slave with jmeter 5.1.1 in CLI, started with ./jmeter-server and with only 2 modifications in jmeter.properties httpclient4.retrycount=1 httpsampler.ignore_failed_embedded_resources=true 2 - Start one master with jmeter 5.1.1 in GUI, started with ./jmeter and with only 4 modifications in jmeter.properties (attachment provided) httpclient4.retrycount=1 httpsampler.ignore_failed_embedded_resources=true remote_hosts=stress06 mode=DiskStore 3 - Open the "SimpleTest.jmx" on GUI and remote run it to your slave node (stress06 here) It's one 60 seconds test plan with two step. Test1: ok - mode=DiskStore - [Uncheck] "retrieve all embedded resources" into advanced tab of "http request defaults" - result: -- one 55000 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file contain response data of main requests (<!DOCTYPE html><html><head>...) -> this behaviour is normal :) Test2: ok - mode=StrippedDiskStore - [Uncheck] "retrieve all embedded resources" into advanced tab of "http request defaults" - result: -- one 320 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file doesn't contain any response data -> this behaviour is normal thanks to Stripped :) Test3: ok - mode=DiskStore - [Check] "retrieve all embedded resources" into advanced tab of "http request defaults" - result: -- one 187000 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file contain response data of main (<!DOCTYPE html><html><head>...) and embedded requests (...<FF><EE>^@^NAdobe^@d<C0>...) -> this behaviour is normal :) Test4: bug - mode=StrippedDiskStore - [Check] "retrieve all embedded resources" into advanced tab of "http request defaults" - result: -- one 187000 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file contain response data of main (<!DOCTYPE html><html><head>...) and embedded requests (...<FF><EE>^@^NAdobe^@d<C0>...) -> Here is the bug, with StrippedDiskStore, all the responses sample should be dropped, and here we have response from main + embedded requests Problem is also present in StrippedBatch, but it should be easier to debug with StrippedDiskStore :)
Created attachment 36735 [details] Strip results hierarchy even deeper I get an error for at least one of the css files: 2019-08-22 22:30:11,401 WARN c.h.c.r.e.LoggingCSSParseErrorHandler: Browser compliant mode skipped CSS from [1:36853] starting at token 'progid' until [1:36940] to token '}' (based on com.he lger.css.parser.ParseException: Encountered unexpected token: ":" ":" at line 1, column 36859. Was expecting one of: "+" "-" That error together with the setting httpsampler.ignore_failed_embedded_resources=true leads to a deeper hierarchy of sample results than the stripping logic expects. The attached patch strips more of the hierarchy and should solve your problems.
@Pierre, can you test next nightly, if this fixes your problems? commit 84fbdbbf96704e00c9e6c905c4833c7e7006b2d0 AuthorDate: Sat Aug 24 17:14:20 2019 +0200 Strip results with subresults deeper in their hierarchy when DataStripping is enabled SampleResults will now be stripped recursively up to a level of four when DataStripping is enabled. As Sonar nagged to widen the scope for readResolve to better support inheritance and it made testing possible, readResolve is now protected instead of private. Bugzilla Id: 63674 --- .../jmeter/samplers/DataStrippingSampleSender.java | 21 ++-- .../samplers/TestDataStrippingSampleSender.java | 130 +++++++++++++++++++++ xdocs/changes.xml | 2 + 3 files changed, 146 insertions(+), 7 deletions(-)
Hello Felix, Thanks for the quick patch, I will test the nightly build and report :)
Hello, it seems that I can not download any nightly build (404 everywhere) https://jmeter.apache.org/nightly.html May I ask you a recent build in .zip archive ? Thanks !
https://ci.apache.org/projects/jmeter/nightlies/r1461-c1a198fb9ac4d2c9c371f76bbe09ddd1bb3a8a69/apache-jmeter-5.2.0-SNAPSHOT.zip Should be a valid link. The script generating the index has not survived the git/gradle migration, yet. I will correct it.
Thanks for the link :) I test again and the bug is fixed ! Well done, and a big thanks for this enhancement :) Test1: - mode = DiskStore / Batch - [Uncheck] "retrieve all embedded resources" ---- result ---- -- one 55000 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file contain response data of main requests (<!DOCTYPE html><html><head>...) : ok -- network usage between slave and master = 60500 KB / 55500 KB : ok Test2: - mode = StrippedDiskStore / StrippedBatch - [Uncheck] "retrieve all embedded resources" ---- result ---- -- one 324 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file doesn't contain any response data : ok -- network usage between slave and master = 4140 KB / 37 KB : ok Test3: - mode = DiskStore / Batch - [Check] "retrieve all embedded resources" ---- result ---- -- one 186000 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file contain response data of main (<!DOCTYPE html><html><head>...) and embedded requests (...<FF><EE>^@^NAdobe^@d<C0>...) : ok -- network usage between slave and master = 196000 KB / 190000 KB : ok Test4: - mode = StrippedDiskStore / StrippedBatch - [Check] "retrieve all embedded resources" ---- result ---- -- one 3400 KB file is generated in /tmp/SerialisedSampleSender*.ser -- this file doesn't contain any response data : ok -- network usage between slave and master = 8650 KB / 5620 KB : ok
This issue has been migrated to GitHub: https://github.com/apache/jmeter/issues/5143