Wie kann ein Java-Prozess mit -Xmx1024m besetzen 3GB Residenten Speicher?
Es ist eine Java web Anwendung auf Websphere6.1, Solaris 10, JDK 1.5.0_13. Setzen wir die maximale heap-Größe zum 1024m. jmap zeigt die heap-status ist gesund. Der heap-Speicher Nutzung ist nur 57%. Kein OutOfMemory überhaupt.
Aber wir sahen sehr hoher RSS (3GB) für das java-Prozess, der aus ps. pmap zeigt einen block von 1,9 G (privater Speicher).
3785: /dmwdkpmmkg/war/610/java/bin/java -server -Dwas.status.socket=65370 -X Address Kbytes RSS Anon Gesperrt Pgsz Mode Mapped-Datei ... 0020A000 2008 2008 2008 - 8K rwx-- [ heap ] 00400000 1957888 1957888 1957888 - 4M-rwx-- [ heap ] 8D076000 40 40 40 - 8K rw--R [ stack tid=10786 ] ...
Ist es ein C-heap-Speicher-Leck in der native code? Welche Vorgehensweise ist empfohlen, um herauszufinden, die Ursache?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Fehlerbehebung Memory Leaks Dokument von Sun kann Ihnen helfen, mit der Suche nach dem problem, warum Ihr high RSS-Feeds, speziell im Abschnitt 3.4.
Wie Sie ausgeführt werden, Websphere, vielleicht können Sie die -memorycheck auf deine VM. Für details siehe hier.
Es ist nicht unbedingt ein Leck in nativen code. Wenn man sich hier, auf Solaris gibt es möglicherweise ein Problem mit Dateien offen zu halten.
Es ist nur ein Haufen von links und Hinweise, aber vielleicht hilfreich, um die Spur zu Ihrem problem.
Könnte dies sogar passieren, wenn es keine native memory leak (wie nicht geschlossene Reißverschluss Ressourcen).
Ich lief in das gleiche problem. Dies ist ein bekanntes problem mit der glibc >= 2.10
Die Heilung ist, um das env-variable
export MALLOC_ARENA_MAX=4
IBM-Artikel über die Einstellung MALLOC_ARENA_MAX
https://www.ibm.com/developerworks/community/blogs/kevgrig/entry/linux_glibc_2_10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en
Google für MALLOC_ARENA_MAX, oder suchen Sie Sie auf SO finden Sie eine Menge von Referenzen.
Möchten Sie vielleicht zu Stimmen, auch andere malloc Optionen zur Optimierung für niedrige Fragmentierung des zugeordneten Speichers:
Können Sie die native malloc_info-Funktion, um Informationen über Speicherzuordnungen. Hier ist ein Beispiel von mit JNA zum Aufruf der nativen Methode malloc_info.
Die heap-Größe os die Java-heap-Größe, gibt es immer noch die VM und andere Bibliotheken, die Teil des Prozesses.
Versuchen, ausführen von Hello World mit 1024m-heap-Größe und ein "for(;;)" und sehen, wie viel es in Anspruch nimmt. Das sollte geben Sie einen Basisplan für das gesamte Speichernutzung.
Sind Sie mittels JNI-Bibliotheken? Ich bin mir nicht sicher, wie native code reserviert RAM, aber das ist, wo ich mit der Suche beginnen.