9
我有一個大型的Java應用程序,有時會使用大量的內存,我想每隔一段時間監視一次,以查看是否已達到堆或超限限制或已接近它們。如何打印出Java jvm內存用於調試目的?
如何使用java打印出最相關的mem使用信息?
我有一個大型的Java應用程序,有時會使用大量的內存,我想每隔一段時間監視一次,以查看是否已達到堆或超限限制或已接近它們。如何打印出Java jvm內存用於調試目的?
如何使用java打印出最相關的mem使用信息?
下面是一段代碼片段,我們有定期登錄我們的應用程序的內存使用情況:
import java.lang.management.GarbageCollectorMXBean
import java.lang.management.ManagementFactory
import java.lang.management.MemoryPoolMXBean
import java.lang.management.MemoryUsage
ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
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,一個Java剖析與每一位JDK去。你會在「bin」文件夾中找到它。
我知道VisualVM,並且在我正在主動調試問題時使用它。但是在夜間運行期間會出現一些問題,這意味着我需要將它們記錄在某處以便稍後處理它們。 我當然可以讓VisualVM應用程序在夜間打開,但它不是我期待的長期解決方案,因爲日誌是永久性的,可以被系統上的所有用戶訪問,而不會與我的計算機綁定在一起:) – 2012-03-27 10:36:08