tomcat java system cpu usage

From: Marian Hettwer <mh(at)kernel32.de>
Date: Tue, 10 Dec 2013 11:47:12 +0100

Hallo Liste,

ich vermute zwar, daß ich am Ende an freebsd-java@ oder freebsd-stable@
schreiben muss, aber ich probiers erstmal hier :)

ich teste auf Arbeit gerade FreeBSD mit java.
Der Cluster in Frage besteht bis jetzt aus 18 Debian Maschinen (Linux
3.2) und meine Versuchskiste wäre die 19. Maschine.
Die Kisten sind das Suchbackend einer der größten deutschen
kleinanzeigen plattformen.
Die Referenzmaschinen (also der bestehende cluster) läuft mit Oracle
Java 7u21, tomcat6 und solr 4.6.0.
Mein Setup der FreeBSD Maschine ist so identisch wie möglich (OpenJDK
7u25 aus packages installiert, ebenso tomcat6).
FreeBSD ist 9.2-REL mit zfs on root (via mfsbsd installiert).

Das verwunderliche was ich sehe ist, daß sobald ich etwas load auf die
Maschinen gebe, 90% der CPU zyklen auf system cpu verbraucht werden.
Das ganze system kommt faktisch zum stillstand.

Details zu dem FreeBSD Server:

hw.machine: amd64
hw.model: Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz
hw.ncpu: 32
hw.byteorder: 1234
hw.physmem: 68657373184
hw.usermem: 55276363776

Die referenz linux kisten sind identische Hardware.

Bei 50% load im Vergleich zu den restlichen Linux Kisten sieht alles gut
aus:

vmstat -->

  procs memory page disks faults
cpu
  r b w avm fre flt re pi po fr sr da0 pa0 in sy cs
us sy id
  2 0 0 5591M 46G 217 0 0 0 302 0 0 0 156 9021 1371
  1 1 98
  1 0 0 5591M 46G 3501 0 0 0 3794 0 0 0 225 107717
1425 4 3 93
  6 0 0 5591M 46G 3457 0 0 0 4033 0 116 0 363 172494
4184 8 5 86
  1 0 0 5637M 46G 5103 0 0 0 5709 0 0 0 289 108938
3666 7 3 89
  1 0 0 5643M 46G 8620 0 0 0 7174 0 0 0 221 122648
3380 6 3 91
  3 0 0 5643M 46G 10521 0 0 0 10622 0 0 0 217 114311
2952 6 2 92
  5 0 0 5643M 46G 10592 0 0 0 10596 0 0 0 228 149292
2986 7 4 89
  2 0 0 5591M 46G 5210 0 0 0 8145 0 133 0 399 171615
5310 7 5 88
  3 0 0 5576M 46G 4526 0 0 0 4820 0 1 0 212 85395
1340 4 2 94
  4 0 0 5576M 46G 191 0 0 0 239 0 0 0 181 152243
2655 7 4 89

Average time per request:
Linux 3.2: 34ms
FreeBSD 9.2: 57ms

Langsamer, aber noch im Rahmen.

Requests per Second:
Linux 3.2: 85 (die Linux kisten haben 100% traffic)
FreeBSD 9.2: 42 (die FreeBSD Maschine hier nur 50% von den Linux kisten)

Jetzt 50% mehr load und damit genauso viel wie auf den restlichen Linux
basierten Maschinen und die FreeBSD Maschine fällt um:

  procs memory page disks faults
cpu
  r b w avm fre flt re pi po fr sr da0 pa0 in sy cs
us sy id
  3 0 0 5740M 46G 231 0 0 0 314 0 0 0 157 311 1396
  1 1 97
  7 0 0 5740M 46G 9 0 0 0 64 0 0 0 392 213164
23011 15 6 79
  1 0 0 5740M 46G 11 0 0 0 0 0 0 0 399 270974
5079 12 9 79
36 0 0 5740M 46G 26 0 0 0 179 0 112 0 700 251200
8534 18 68 14
49 0 0 5740M 46G 22 0 0 0 64 0 0 0 586 227161
5537 20 79 1
40 0 0 5740M 46G 100 0 0 0 0 0 0 0 588 224009
7435 16 82 3
52 0 0 5744M 46G 272 0 0 0 0 0 0 0 506 207838
8580 16 82 3
40 0 0 5759M 46G 859 0 0 0 64 0 0 0 546 202021
2974 13 87 0
33 0 0 5803M 46G 3578 0 0 0 151 0 94 0 839 252272
38571 27 61 13
44 0 0 5840M 46G 1067 0 0 0 324 0 0 0 461 205458
10331 17 78 4

und system cpu explodiert. :-/

Average time per request:
Linux: 34ms
FreeBSD: 2,8s (!)

Req/s:
Linux: 85
FreeBSD: 55

Und die Kiste ist so lahm, daß der load balancer sie raus wirft (varnish
vor den solr Maschinen).

Um auszuschließen, daß es zu große unterschiede zwischen Oracle Java7u21
vs. OpenJDK 7u25 gibt, habe ich noch einen Ubuntu 12.4.3 LTS mit ins
Rennen geworfen. Ebenfalls Tomcat6 und OpenJDK 7u25, aber Linux 3.8. Das
system läuft stabil mit den gleichen Kennzahlen wie die anderen Debian
Systeme.
Die JVM Parameter (Xmx, Xms, Xmn, GC settings, ...) sind auf meinem
FreeBSD testsystem identisch mit den anderen Linux kisten.

Also ist irgendwas im FreeBSD setup krumm.
Aber was?

Irgendeine Idee wie ich mich dem Problem nähern kann?
Wie würde ich die system cpu usage analysieren? procstat -k war nicht
sonderlich aufschlussreich.
Was als nächstes? truss? dtrace?

Ich wäre über jede Idee hilfreich :-)

BeSDe Grüße,
Marian

PS.: Warum das alles eigentlich? Seit Jahren ist hier Debian gesetzt als
System. Ich bin aber zunehmend erschüttert über die Art und Weise wie
sich die Linux kernel releases weiter entwickeln. Unglaublicher Unfug
wenn man einen stabilen Kernel haben will. Treiberversionen rausbekommen
ist die Hölle. Welcher Release darfs denn sein? Linux 3.0, 3.2, 3.4,
3.10? Alle angeblich longterm. Aha. Und was findet sich eigentlich in
den distributionskerneln für ein MischMasch aus treiberversionen? Alles
ganz schlimm und schlimmer werdend. grrrr.
Ergo der Versuch das ganze Setup unter FreeBSD aufzusetzen. Schließlich
habe ich gute Gründe, daß ich FreeBSD zumindest privat seit 4.0-Release
einsetze :)
Leider scheitert schon dieser Versuch. So ist das für mich auf Arbeit
nicht einzusetzen. Geschweige denn kann man Kollegen vorschlagen von
Debian auf FreeBSD zu wechseln...

-- 
the problem with troubleshooting is that trouble shoots back.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 10 Dec 2013 - 11:47:18 CET

search this site