-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcollect_gc_stats.sh
executable file
·90 lines (70 loc) · 2.96 KB
/
collect_gc_stats.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash
#
# Author: Jonatan Kazmierczak (Jonatan at Son-of-God.info)
#
# define variables
STATS_DIR=stats
RESPONSE_SIZE=50000
RESPONSE_COUNT=99
THREAD_COUNT=3
JAVA_APP="-jar build/libs/request-processor.jar $RESPONSE_SIZE $RESPONSE_COUNT $THREAD_COUNT"
RESPONSE_TIMES_FILE=response_times.txt
# Path to java command from OpenJDK build
JAVA_CMD=/opt2/jdk-15.0.1+9_hotspot/bin/java
# Path to java command from OpenJDK with OpenJ9 VM
JAVA_J9_CMD=/opt2/jdk-15.0.1+9_openj9/bin/java
# Path to java command from Zing VM
JAVA_ZING_CMD=/opt2/zing20.12.0.0-5-ca-jdk11.0.9-linux_x64/bin/java
# Path to java command from GraalVM
JAVA_GRAALVM_CMD=/opt2/graalvm-ce-java11-20.3.0/bin/java
echo "-- Java GC Performance Statistics Collector --"
echo "Please make sure, that you are not running it in virtualized environment (i.e. Docker) and that your CPU runs on a constant frequency"
echo
$JAVA_CMD -version
echo
OUT_FILE=$STATS_DIR/gc.txt
mkdir -p $STATS_DIR
# HotSpot
echo -n vm=HotSpot,gc=Serial, > $OUT_FILE
/usr/bin/time $JAVA_CMD -XX:+UseSerialGC $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/Serial.csv
echo -n vm=HotSpot,gc=Parallel, >> $OUT_FILE
/usr/bin/time $JAVA_CMD -XX:+UseParallelGC $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/Parallel.csv
echo -n vm=HotSpot,gc=G1, >> $OUT_FILE
/usr/bin/time $JAVA_CMD -XX:+UseG1GC $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/G1.csv
echo -n vm=HotSpot,gc=Z, >> $OUT_FILE
/usr/bin/time $JAVA_CMD -XX:+UseZGC $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/Z.csv
echo -n vm=HotSpot,gc=Shenandoah, >> $OUT_FILE
/usr/bin/time $JAVA_CMD -XX:+UseShenandoahGC $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/Shenandoah.csv
# OpenJ9
echo -n vm=OpenJ9,gc=gencon, >> $OUT_FILE
/usr/bin/time $JAVA_J9_CMD $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/gencon.csv
echo -n vm=OpenJ9,gc=balanced, >> $OUT_FILE
/usr/bin/time $JAVA_J9_CMD -Xgcpolicy:balanced $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/balanced.csv
echo -n vm=OpenJ9,gc=optavgpause, >> $OUT_FILE
/usr/bin/time $JAVA_J9_CMD -Xgcpolicy:optavgpause $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/optavgpause.csv
echo -n vm=OpenJ9,gc=optthruput, >> $OUT_FILE
/usr/bin/time $JAVA_J9_CMD -Xgcpolicy:optthruput $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/optthruput.csv
echo -n vm=OpenJ9,gc=metronome, >> $OUT_FILE
/usr/bin/time $JAVA_J9_CMD -Xgcpolicy:metronome $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/metronome.csv
# Zing
echo -n vm=Zing,gc=C4, >> $OUT_FILE
/usr/bin/time $JAVA_ZING_CMD $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/C4.csv
# GraalVM
echo -n vm=GraalVM,gc=G1, >> $OUT_FILE
/usr/bin/time $JAVA_GRAALVM_CMD $JAVA_APP 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/GraalVM-G1.csv
# Substrate
echo -n vm=Substrate,gc=none, >> $OUT_FILE
/usr/bin/time ./request-processor $RESPONSE_SIZE $RESPONSE_COUNT $THREAD_COUNT 2>>$OUT_FILE
mv $RESPONSE_TIMES_FILE $STATS_DIR/SVM.csv