Как распечатать использование памяти Java jvm для целей отладки? - PullRequest
11 голосов
/ 27 марта 2012

У меня есть большое Java-приложение, которое время от времени использует огромные объемы памяти, и я хотел бы отслеживать это через определенные промежутки времени, чтобы видеть, достигнуты ли кучи или ограничения permgen или приблизились к ним.

Как я могу распечатать наиболее релевантные фрагменты информации об использовании mem, используя java?

Ответы [ 2 ]

13 голосов
/ 27 марта 2012

Вот фрагмент кода, который у нас есть, который периодически регистрирует использование памяти нашим приложением:

import java.lang.management.GarbageCollectorMXBean
import java.lang.management.ManagementFactory
import java.lang.management.MemoryPoolMXBean
import java.lang.management.MemoryUsage

log("Heap", ManagementFactory.getMemoryMXBean().getHeapMemoryUsage());
log("NonHeap", ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage());
List<MemoryPoolMXBean> beans = ManagementFactory.getMemoryPoolMXBeans();
for (MemoryPoolMXBean bean: beans) {
    log(bean.getName(), bean.getUsage());
}

for (GarbageCollectorMXBean bean: ManagementFactory.getGarbageCollectorMXBeans()) {
    log(bean.getName(), bean.getCollectionCount(), bean.getCollectionTime());
}
1 голос
/ 27 марта 2012

Вы можете попробовать visualVM, профилировщик Java, который поставляется с каждым JDK.Вы найдете его в папке "bin".

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