如何监控 Java 内存使用情况?
2022-08-31 13:00:02
我们有一个在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”。基本上,他的论点与这里讨论的论点相同。但我仍然不明白:
- 我怎样才能有我的内存使用曲线?
- 显式 gc() 有什么问题?我不关心显式gc()可能发生的小性能问题,我估计在1-3%中。我需要的是内存和线程监视器,这有助于我在客户现场分析我们的系统。