Prozessspeicher gegen Heap - JVM

8

Wir haben eine Webanwendung auf einem tomcat -Server bereitgestellt. Es gibt bestimmte geplante Jobs, die wir ausführen, nach denen der Heap-Speicher ansteigt und sich beruhigt, alles scheint in Ordnung zu sein. Der Systemadministrator beschwert sich jedoch darüber, dass die Speichernutzung ("Top" unter Linux) zunimmt, je mehr die geplanten Jobs sind. Was ist die Beziehung zwischen Heap-Speicher und Speicher der CPU? Kann es von JVM-Einstellungen gesteuert werden? Ich habe JConsole verwendet, um das System zu überwachen.
Ich erzwang die Garbage Collection über JConsole, und die Heap-Nutzung ist zurückgegangen. Die Speicherauslastung auf Linux blieb jedoch hoch und nahm nie ab.

Irgendwelche Ideen oder Vorschläge wären eine große Hilfe?

    
user546352 04.02.2011, 00:01
quelle

3 Antworten

4

Was wahrscheinlich beobachtet wird, ist die virtuelle Größe und nicht die resident eingestellte Größe des Java-Prozesses (der Java-Prozesse)? Wenn Sie ein Ziel für einen kleinen Footprint haben, möchten Sie möglicherweise nicht -Xms oder eine Mindestgröße für die JVM-Heap-Argumente einbeziehen und die 70% -XX:MaxHeapFreeRatio= auf eine kleinere Zahl anpassen aggressivere Haufenschrumpfung.

In der Zwischenzeit, geben Sie detaillierter an, was mit dem Kommentar beobachtet wurde, dass der Linux-Speicher nie abgenommen hat? Welche Metrik?

    
Jé Queue 04.02.2011, 00:15
quelle
8

Der vom JVM-Prozess zugewiesene Speicher entspricht nicht der Größe des Heapspeichers. Die Größe des verwendeten Heapspeichers kann sinken, ohne dass der von der JVM zugewiesene Speicherplatz tatsächlich reduziert wird. Die JVM muss einen Trigger erhalten, der angibt, dass die Größe des Heapspeichers verringert werden soll. Wie @Xepoch erwähnt, wird dies von -XX:MaxHeapFreeRatio gesteuert.

  

Allerdings beschwert sich der Systemadministrator darüber, dass die Speichernutzung ("top" unter Linux) weiter zunimmt, je mehr die geplanten Jobs [ausgeführt] sind.

Das liegt daran, dass Sie wahrscheinlich eine Art Speicherleck haben. Systemadministratoren neigen dazu, sich zu beschweren, wenn sie sehen, dass Prozesse mehr und mehr Speicherplatz verbrauchen.

  

Irgendwelche Ideen oder Vorschläge wären eine große Hilfe?

Haben Sie sich die Anzahl der Threads angesehen? Erstellen Sie eine Anwendung, erstellen Sie eigene Threads und senden Sie sie an Deadlock und warten Sie für immer leer? Integrieren Sie APIs von Drittanbietern, die JNI verwenden können?

    
Tim Bender 04.02.2011 00:55
quelle
0

Sie können die Einstellungen -Xmx und -Xms verwenden, um die Größe des Heapspeichers anzupassen. Mit tomcat können Sie vor dem Start eine Umgebungsvariable setzen:

%Vor%

Dies erstellt zunächst einen Heap von 256 MB mit einer maximalen Größe von 512 MB.

Einige weitere Details: Ссылка 'Out + of + Memory' + Fehler + durch + steigend + verfügbar + Speicher

    
wmacura 04.02.2011 00:15
quelle

Tags und Links