我之前已经请求过这方面的帮助here,但这个问题仍然存在,之前接受的答案并没有解释。我还阅读了关于这个主题的大多数文章和SO线程,并且大多数指向应用程序泄漏或适度的开销,我认为这些都不能解释我所看到的内容。
我有一个相当大的Web服务(单独的应用程序是600MB),当单独使用时,操作系统报告增加到5GB或更多。但是,JVM限制为1GB(Xms,Xmx)。
我做了大量的内存测试,没有发现任何泄漏。我还运行了Oracle的Java Mission Control(基本上是JMX控制台)并验证了实际的JVM使用量只有1GB左右。这意味着Tomcat本身,本机内存等消耗大约4GB。
我不认为JNI等应该受到指责,因为这个特定的安装基本上没有使用过。它所做的只是定期检查数据库中的工作请求,并定期监视其资源消耗。此外,直到最近使用多年后,这仍然不是问题。
JMX控制台确实报告了高级别的碎片(70%)。但这可以解释额外的内存消耗吗?
最重要的是,并不是为什么会发生这种情况,而如何可以修复/配置它以便它停止发生。有什么建议吗?
以下是环境的一些细节:
另见: