【发布时间】:2009-06-29 15:41:19
【问题描述】:
我们有一个在 Jboss 上运行的 j2ee 应用程序,我们想要监控它的内存使用情况。目前我们使用以下代码
System.gc();
Runtime rt = Runtime.getRuntime();
long usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
logger.information(this, "memory usage" + usedMB);
此代码运行良好。这意味着它显示了与现实相对应的记忆曲线。当我们从数据库创建一个大的 xml 文件时,曲线上升,提取完成后曲线下降。
一位顾问告诉我们,显式调用 gc() 是错误的,“让 jvm 决定何时运行 gc”。基本上他的论点和disscussed here是一样的。 但我还是不明白:
- 如何获得内存使用曲线?
- 显式 gc() 有什么问题?我不关心显式 gc() 可能发生的小性能问题,我估计在 1-3% 之间。我需要的是内存和线程监视器,它可以帮助我在客户站点上分析我们的系统。
【问题讨论】:
-
用 jvisualvm 监控 - 提供更好的统计数据。
标签: java garbage-collection monitoring memory-management