-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Obtain JSR223 usage report after test execution #6510
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
…ort at the end of run
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks interesting, however, I'm not sure it solves true issues though.
If you want improve the caching, then we should probably forbid ${...}
within script code.
<property name="jsr223.compiled_scripts_cache_spec"> | ||
Used by JSR-223 elements.<br/> | ||
Caffeine framework spec configuration in String format. Overrides <code>jsr223.compiled_scripts_cache_size</code><br/> | ||
Defaults to: <code>maximumSize=<jsr223.compiled_scripts_cache_size>,recordStats</code></property> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you refer the documentation or copy the relevant bits here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Spec/configurable attributes description: https://www.javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/latest/com.github.benmanes.caffeine/com/github/benmanes/caffeine/cache/CaffeineSpec.html and logic behind counters: https://www.javadoc.io/doc/com.github.ben-manes.caffeine/caffeine/latest/com.github.benmanes.caffeine/com/github/benmanes/caffeine/cache/stats/CacheStats.html
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mean it would be worth adding the links to JMeter documentation
if (COMPILED_SCRIPT_CACHE.estimatedSize() > 0) | ||
logger.info("Compiled cache size: {}, stats: {}", COMPILED_SCRIPT_CACHE.estimatedSize(), COMPILED_SCRIPT_CACHE.stats()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add braces. We do use them, however, the check was missing: #6516
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure the stats are actionable. The stats do not seem to help users to identify the offending elements.
What are the units for "Compiled cache size"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi,
I've patched the code; the report only is the starting point of investigation, something which isn't available now? I'll come back in the following days with some sample JMX to help demo the outcome.
Indeed, doesn't point to exact "missing" JSR223 element, but still it's a starting point.
Disabling ${} is not necessary, maybe a warning is enough? Anyway, this matters only if the variable is stored in vars, if defined locally in the JSR223 then it works fine, i.e. is cached afaik.
Thanks
JSR223 compiled script can be cached; size of cache can be configured. What lacks now is the view of actual cache usage after test run.
Description
Allow configuration of the Caffeine cache API in detail, as per supported parameters of the API; one of the parameters allow you to specify a cache usage report should be generated. This will be done at the end of the test run.
Used cache size will always be printed.
Motivation and Context
One could configure the JSR223 cache usage but could not see how much of the cache is actually used, if sizing is appropriate as per JSR223 elements used in a JMX, if code can actually be cached, etc. This is especially useful in load and performance testing to reduce computing time on client side.
Sample output when report is disabled (only used cache size is printed):
2025-10-06 14:32:13,887 INFO o.a.j.u.JSR223TestElement: Compiled cache size: 3, stats: CacheStats{hitCount=0, missCount=0, loadSuccessCount=0, loadFailureCount=0, totalLoadTime=0, evictionCount=0, evictionWeight=0}
Sample output when report is enabled (used cache size and details are printed):
2025-10-06 14:45:52,434 INFO o.a.j.u.JSR223TestElement: Compiled cache size: 3, stats: CacheStats{hitCount=2, missCount=3, loadSuccessCount=3, loadFailureCount=0, totalLoadTime=200523600, evictionCount=0, evictionWeight=0}
How Has This Been Tested?
Simple runs of JSR223 script elements with checked or unchecked 'Cache compile script if available' and monitor the report; parameter left as the current pushed default in jmeter.properties or with recordStats property removed.
Screenshots (if appropriate):
Types of changes
Checklist: