%20Metaspace%20w%C3%A4chst%20st%C3%A4ndig.png)
Ich habe einen Lucee-Server (ColdFusion) in Produktion.
Zuerst stellten wir fest, dass der Betriebssystemspeicher erschöpft war. Wir reduzierten den -Xmx2048m
verfügbaren Speicher auf die Hälfte und setzten -XX:MaxMetaspaceSize=1000m
.
Nach einer Weile meldete der Tomcat von Lucee jedoch OutOfMemory-Fehler und erforderte einen Neustart.
Da der Metaspace zusätzlich zum Heap existiert und standardmäßig nicht begrenzt ist, deutet dies darauf hin, dass sich der Metaspace füllt.
Ich habe dann einen Stammgast hinzugefügt, jcmd <pid> VM.metaspace
um diese Annahme zu überprüfen. Am Morgen habe ich:
garbage-first heap total 1572864K, used 959885K [0x0000000080000000, 0x0000000100000000)
region size 1024K, 249 young (254976K), 18 survivors (18432K)
Metaspace used 99985K, capacity 102839K, committed 104996K, reserved 1114112K
class space used 7301K, capacity 8154K, committed 8320K, reserved 1015808K
und am Abend:
garbage-first heap total 1616896K, used 556546K [0x0000000080000000, 0x0000000100000000)
region size 1024K, 25 young (25600K), 5 survivors (5120K)
Metaspace used 108125K, capacity 111035K, committed 113828K, reserved 1122304K
class space used 7509K, capacity 8463K, committed 8704K, reserved 1015808K
Der Metaspace wächst also um etwa 8 MB pro Tag!
Ich habe festgestellt, dass JAXB ein Problem hatte, das dieses Verhalten verursachte, also habe ich versucht, es zu umgehen, indem ich hinzugefügt habe -Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true
, aber das hat nicht geholfen oder es vielleicht sogar noch schlimmer gemacht.
Wie kann ich herausfinden, was zum Teufel meinen Metaspace füllt?
Antwort1
Ich habe dafür noch keine Lösung gefunden, aber es gibt ein offenes Ticket dafür. Ich muss meinen Server derzeit regelmäßig neu starten, um einen Absturz zu verhindern.
Bitte beachten Sie
https://luceeserver.atlassian.net/browse/LDEV-2904
Und
https://dev.lucee.org/t/lucee-5-3-5-92-java-non-heap-memory-steadily-increases/6948/23