43 votes

Pouvez-vous obtenir des statistiques de base du GC en Java?

Je voudrais avoir quelques cours d'exécution des applications de serveur périodiquement sortie générale GC chiffres de performances en Java, quelque chose comme la GC équivalent de l'Exécution.freeMemory(), etc. Quelque chose comme le nombre de cycles de fait, la moyenne du temps, etc.

Nous avons les systèmes fonctionnant sur des ordinateurs client où il existe un soupçon que mal configuré pools de mémoire sont à l'origine excessive GC de la fréquence et de la longueur il me semble qu'il serait bon, en général, de faire périodiquement rapport à la base de l'activité GC.

Est-il indépendant de la plateforme façon de le faire?

EDIT: j'ai particulièrement envie de sortie de ces données dans le journal système (la console), lors de l'exécution; ce n'est pas quelque chose que je veux me connecter à la JVM pour, comme il le serait avec JConsole ou JVisualVM.

Edit2: Le MX bean ressemble à ce que je veux, quelqu'un aurait-il un travail exemple de code qui permet d'obtenir l'un de ces?

58voto

Greg Case Points 10300

Voici un exemple utilisant GarbageCollectorMXBean pour imprimer les statistiques du GC. Vraisemblablement, vous appelleriez cette méthode périodiquement, par exemple la planification en utilisant un ScheduledExecutorService .

 public void printGCStats() {
    long totalGarbageCollections = 0;
    long garbageCollectionTime = 0;

    for(GarbageCollectorMXBean gc :
            ManagementFactory.getGarbageCollectorMXBeans()) {

        long count = gc.getCollectionCount();

        if(count >= 0) {
            totalGarbageCollections += count;
        }

        long time = gc.getCollectionTime();

        if(time >= 0) {
            garbageCollectionTime += time;
        }
    }

    System.out.println("Total Garbage Collections: "
        + totalGarbageCollections);
    System.out.println("Total Garbage Collection Time (ms): "
        + garbageCollectionTime);
}
 

16voto

Ran Biron Points 3015

12voto

Michael Myers Points 82361

Essayez -XX:-PrintGC et -XX:-PrintGCDetails ; voir Options de débogage VM .

0voto

Fortyrunner Points 8072

Légèrement hors sujet, mais vous pouvez connecter VisualVM et JConsole aux applications en cours d'exécution et consulter des statistiques utiles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X