Wir haben eine Java-Anwendung als lange laufenden Dienst haben (tatsächliche up-Zeit für diese JVM 31 Tage 3 Stunden 35 min)JVM undichter Speicher außerhalb Heap und Pufferpools
Durch Windows-Taskmanager des Prozesses verwendet 1075384320 B - fast ein GB. kein Leck hier
Buffer Pools -
Heap Größe der JVM auf 256 MB (-Xmx256m)
Speicher-Daten
Memory:
Size: 268,435,456 B
Max: 268,435,456 B
Used: 100,000,000 up to 200,000,000 B
eingeschränkt
Direct:
Count: 137
Memory Used and Total Capacity: 1,348,354 B
Mapped:
Count: 0
Memory Used and Total Capacity: 0 B
- kein Leck hier
meine Frage: wo sich die JVM den zusätzlichen Speicher verwendet?
Zusätzliche Informationen:
Java: version 1.8.0_74 32 bit (Oracle)
Classes:
Total loaded: 17,248
Total unloaded: 35,761
Threads:
Live: 273
Live peak: 285
Daemon: 79
Total started: 486,282
Nach einem Neustart es einige Tage für die Prozessgröße nimmt zu wachsen, so natürlich regelmäßigen Neustart helfen würde, und vielleicht eine neuere Java-Version verwenden auch das Problem lösen kann , aber ich hätte gerne eine Erklärung für dieses Verhalten, e. G. bekannter Bug in 1.8.0 vor 111, behoben in ... - Ich habe noch nichts gefunden.
Wir verwenden etwa 350 solcher Installationen an verschiedenen Orten, so dass der Wechsel nicht so einfach ist.
Werfen Sie einen Blick auf den verwendeten Speicher mit jvisualvm. Sie finden es in JDK_HOME/bin. Sie können dann die lebenden Instanzen Ihrer Klassen zählen. –
Was denkst du, wo ich die obigen Daten verfolge? –
Wie Sie oben sehen, sind geladene Klassen 17.248; Metaspace verbraucht ungefähr 58 M. –