Можете ли вы получить базовую статистику GC в Java? - PullRequest
39 голосов
/ 21 января 2009

Я хотел бы, чтобы некоторые долго работающие серверные приложения периодически выводили общие числа производительности GC в Java, что-то вроде GC-эквивалента Runtime.freeMemory () и т. Д. Что-то вроде числа выполненных циклов, среднего времени и т. Д.

У нас есть системы, работающие на клиентских компьютерах, где есть подозрение, что неправильно настроенные пулы памяти вызывают чрезмерную частоту и длину GC - мне кажется, что в целом было бы хорошо периодически сообщать об основных действиях GC.

Есть ли какой-нибудь независимый от платформы способ сделать это?

РЕДАКТИРОВАТЬ: я специально хочу выводить эти данные в системный журнал (консоль) во время работы; это не то, для чего я хочу подключиться к JVM, как это было бы с JConsole или JVisualVM.

Edit2: bean-компонент MX выглядит так, как я хочу - у кого-нибудь есть пример рабочего кода, который получает один из них?

Ответы [ 4 ]

51 голосов
/ 22 января 2009

Вот пример использования <a href="http://java.sun.com/javase/6/docs/api/java/lang/management/GarbageCollectorMXBean.html" rel="noreferrer">GarbageCollectorMXBean</a> для распечатки статистики GC. Предположительно, вы будете периодически вызывать этот метод, например, планирование с использованием <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html" rel="noreferrer">ScheduledExecutorService</a>.

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);
}
15 голосов
/ 21 января 2009
13 голосов
/ 21 января 2009

Попробуйте -XX:-PrintGC и -XX:-PrintGCDetails; см. Параметры отладки виртуальной машины .

0 голосов
/ 22 января 2009

Немного не по теме, но вы можете подключить VisualVM и JConsole к запущенным приложениям и посмотреть полезную статистику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...