Wie überwacht man die Speichernutzung in Java?

Wir haben eine j2ee-Anwendung, die auf Jboss ausgeführt wird, und wir möchten deren Speichernutzung überwachen. Derzeit verwenden wir den folgenden Code

    System.gc();
    Runtime rt = Runtime.getRuntime();
    long usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
    logger.information(this, "memory usage" + usedMB);

Dieser Code funktioniert gut. Das heißt, es zeigt eine Gedächtniskurve, die der Realität entspricht. Wenn wir eine große XML-Datei aus einer Datenbank erstellen, steigt eine Kurve an und sinkt, nachdem die Extraktion abgeschlossen ist.

Ein Berater sagte uns, dass der explizite Aufruf von gc () falsch ist, "lass jvm entscheiden, wann gc ausgeführt werden soll". Grundsätzlich waren seine Argumente die gleichen wiehier diskutiert. Aber ich verstehe immer noch nicht:

Wie kann ich meine Speichernutzungskurve haben?Was ist los mit dem expliziten gc ()? Ich interessiere mich nicht für kleine Leistungsprobleme, die mit expliziten gc () auftreten können und die ich in 1-3% schätzen würde. Was ich brauche, ist ein Speicher- und Thread-Monitor, der mir bei der Analyse unseres Systems beim Kunden hilft.

Antworten auf die Frage(13)

Ihre Antwort auf die Frage