Am 27.01.2018 um 16:54 schrieb Philippe Mouawad:
On Sat, Jan 27, 2018 at 4:41 PM, Felix Schumacher <
[email protected]> wrote:
Am 27.01.2018 um 16:24 schrieb [email protected]:
Author: pmouawad
Date: Sat Jan 27 15:24:32 2018
New Revision: 1822417
URL: http://svn.apache.org/viewvc?rev=1822417&view=rev
Log:
Comment JAVAVER better as per Felix note
Adapt some GC tuning based on:
- http://www.evanjones.ca/jvm-mmap-pause.html
- https://docs.oracle.com/javase/9/gctuning/garbage-first-
garbage-collector-tuning.htm
I think it would be better to leave GC tuning to the user, as it is really
specific to the users environment.
The first URL points to problems with GC that happened on a JVM with at
least 17G of RAM.
I agree that it breaks jstat, if you feel we should keep it commented ok
for me.
Regarding heap size, are you sure ? where did you find it ?
Do you mean the heap size of 17G? That can be deduced from the given gc
log entries.
Our default is 512M (which is pretty low nowadays).
I think we should increase it to 1G , I never really run it with default
options.
+1 :)
The problem occurred on a program, that used memory mapped files. Does
JMeter use it by default? I don't know.
Isn't it related to Java ?
https://bugs.openjdk.java.net/browse/JDK-8076103
When I read the comments correctly on the original first URL, it seems
that the problem does not seem to be that hard, if /tmp is on tmpfs
(which it is on many modern linux distros).
Did you experience long lags in GC?
And as a side effect the options from the first URL will break jstat - a
tool, that I often use to find memory and performance problems.
Another thing to keep in mind is, that G1 is designed for heap sizes of
32G and more.
In my experience (but I am not very good at GC tuning), I had better
results regarding STW with G1 (even for heaps > 3g ) than with other
policies.
I think the differences for "normal" programs are rather small,
especially on small heaps. But I found
https://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsTuneJVM.html
where G1 is recommended for heaps from 16GB upwards and CMS for lower
heap sizes.
But on as G1 is the default in Java 8 and having no negative report so
far, we should stay with G1.
Felix
But on the other hand, if you found those options to be helpful with your
tests, it is good to document them.
Felix
Modified:
jmeter/trunk/bin/jmeter
jmeter/trunk/bin/jmeter.bat
Modified: jmeter/trunk/bin/jmeter
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/jmeter?rev=182
2417&r1=1822416&r2=1822417&view=diff
============================================================
==================
--- jmeter/trunk/bin/jmeter (original)
+++ jmeter/trunk/bin/jmeter Sat Jan 27 15:24:32 2018
@@ -35,7 +35,7 @@
##
## JMETER_GC_ALGO (Optional) Java runtime options to specify JVM
garbage collection
## algorithm
-## Defaults to "-XX:+UseG1GC -XX:MaxGCPauseMillis=250
-XX:G1ReservePercent=20"
+## Defaults to "-XX:+UseG1GC -XX:MaxGCPauseMillis=100
-XX:G1ReservePercent=20 -XX:+ParallelRefProcEnabled
-XX:+PerfDisableSharedMem"
##
## JMETER_HEAP (Optional) Java runtime options for memory
management
## used when JMeter is started.
@@ -173,7 +173,7 @@ esac
# RUN_IN_DOCKER="-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap"
# Finally, some tracing to help in case things go astray:
-: "${JMETER_GC_ALGO:="-XX:+UseG1GC -XX:MaxGCPauseMillis=250
-XX:G1ReservePercent=20"}"
+: "${JMETER_GC_ALGO:="-XX:+UseG1GC -XX:MaxGCPauseMillis=100
-XX:G1ReservePercent=20 -XX:+ParallelRefProcEnabled
-XX:+PerfDisableSharedMem"}"
# Always dump on OOM (does not cost anything unless triggered)
Modified: jmeter/trunk/bin/jmeter.bat
URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/jmeter.bat?rev
=1822417&r1=1822416&r2=1822417&view=diff
============================================================
==================
--- jmeter/trunk/bin/jmeter.bat (original)
+++ jmeter/trunk/bin/jmeter.bat Sat Jan 27 15:24:32 2018
@@ -37,7 +37,7 @@ rem JVM_ARGS - (Optional) Java opti
rem Defaults to '-Duser.language="en"
-Duser.region="EN"'
rem
rem GC_ALGO - (Optional) JVM garbage collector options
-rem Defaults to '-XX:+UseG1GC -XX:MaxGCPauseMillis=250
-XX:G1ReservePercent=20'
+rem Defaults to '-XX:+UseG1GC -XX:MaxGCPauseMillis=100
-XX:G1ReservePercent=20 -XX:+ParallelRefProcEnabled
-XX:+PerfDisableSharedMem'
rem
rem HEAP - (Optional) JVM memory settings used when starting
JMeter
rem Defaults to '-Xms512m -Xmx512m
-XX:MaxMetaspaceSize=256m'
@@ -92,7 +92,9 @@ if not defined JAVAVER (
rem Check if version is from OpenJDK or Oracle Hotspot JVM prior to
9 containing 1.${version}.x
-rem JAVAVER will contain "XXXX", so we extract 2 chars starting from
index 1
+rem JAVAVER will be equal to "9.0.4" (quotes are part of the value) for
Oracle Java 9
+rem JAVAVER will be equal to "1.8.0_161" (quotes are part of the value)
for Oracle Java 8
+rem so we extract 2 chars starting from index 1
IF "%JAVAVER:~1,2%"=="1." (
set JAVAVER=%JAVAVER:"=%
for /f "delims=. tokens=1-3" %%v in ("%JAVAVER%") do (
@@ -146,7 +148,7 @@ rem Uncomment this to generate GC verbos
rem set VERBOSE_GC=-Xlog:gc*,gc+age=trace,gc+heap=debug:file=gc_jmet
er_%%p.log
if not defined GC_ALGO (
- set GC_ALGO=-XX:+UseG1GC -XX:MaxGCPauseMillis=250
-XX:G1ReservePercent=20
+ set GC_ALGO=-XX:+UseG1GC -XX:MaxGCPauseMillis=100
-XX:G1ReservePercent=20 -XX:+ParallelRefProcEnabled
-XX:+PerfDisableSharedMem
)
set SYSTEM_PROPS=-Djava.security.egd=file:/dev/urandom