我有一个大型Java应用程序,它有时会使用大量内存,我想每隔一段时间监控一下,看看是否达到或接近了堆或置换的限制。
如何使用java打印出最相关的mem使用信息?
以下是我们定期记录应用程序内存使用情况的代码片段:
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());
}
您可以尝试visualVM,这是一种适用于每个JDK的Java探查器。你会在"bin"文件夹中找到它。