Shenandoah performance problem
Attila Axt
axt at load.hu
Tue Oct 22 11:44:07 UTC 2019
>> https://imgur.com/S2vEmnL
> I believe this shows that non-generational Shenandoah uses more CPU than a generational CMS: so the
> GC cycles are longer on average, and then the total CPU time is larger. For single-threaded
> workload, the heap occupancy might be much lower, so GC cycle length is smaller?
>
> It would be interesting to zoom in and see if CPU utilization differs when GC is idle to confirm.
Sorry, I wasn't clear enough about the measurement setup. All those
graphs are measured the same time.
We are running a recommendation service. The incoming traffic is
load-balanced between serveral application servers. I did the
measurement on two of those servers, one configured with CMS, the other
configured with Shenandoah. These two nodes are receiving roughly the
same traffic.
What you see on the graph is not the total cpu-time by various
standalone test, but instead the cpu-time of a thread/threadgroup of
this application.
I wrote a simple tool, which queries the cpu time usage of every
thread(group) in every 5 seconds . If I display the results in a
top-like manner, it looks like this:
Elapsed time, S:1260.29s, L:5.07s
SCPU SCPU/s SCPU% LCPU LCPU/s LCPU%
TID NAME (COUNT)
2871394 2278.36 - 12794 2521.72
- SUMMARY
1038532 824.04 36.17 4257 839.06 33.27
649 http-main-# (25)
764557 606.65 26.63 3084 607.86 24.11
18198 Process Queue (1)
494317 392.22 17.22 3276 645.70 25.61
17556 Shenandoah GC Threads## (6)
152115 120.70 5.30 582 114.71 4.55
17960 Xmemcached-Reactor-# (20)
109960 87.25 3.83 434 85.54 3.39
17584 Log4j2-TF-1-AsyncLogger (1)
[...]
CPU: is the cpu time burned between the last measurement and the current
measurement. The prefix 'S' means from the start of the tool , 'L' means
from the last measurement 5 seconds ago.
CPU/s: CPU divided by the length of the measurement period, basically
average cputime burned by the threadgroup
CPU%: percentage of this threadgroups cpu usage
As you can see on the above snapshot, the 'http-main-#', 'Process
Queue', and 'Shenandoah GC Threads' are responsible ~80% of the cpu time
burned, I named those on the graph as 'Multi threaded workload', 'Single
threaded workload' and GC.
What you see on the graphs, is the average cpu time burned by those
threadgroups with a 5 second resolution (LCPU/s column).
Cheers,
axt
More information about the shenandoah-dev
mailing list