源码

java – JVM内存使用失控


我有一个Tomcat webapp,它代表客户端执行一些漂亮的内存和CPU密集型任务.这是正常的,是所需的功能.但是,当我运行Tomcat时,内存使用量会随着时间的推移而猛增至4.0GB以上,此时我通常会杀死该进程,因为它会破坏我在开发计算机上运行的所有其他内容:

我以为我无意中用我的代码引入了内存泄漏,但在用VisualVM检查后,我看到了一个不同的故事:

VisualVM显示堆占用大约一GB的RAM,这就是我用CATALINA_OPTS =“ – Xms256m -Xmx1024”设置的.

根据VisualVM的说法,为什么我的系统认为这个过程占用了大量的内存,它几乎没有占用任何内容?

经过一番进一步的嗅探,我注意到如果在应用程序中同时运行多个作业,则内存不会被释放.但是,如果我在将另一个作业提交给由ExecutorService提供服务的BlockingQueue之前等待每个作业完成,那么内存将被有效地回收.我该怎么调试呢?为什么垃圾收集/内存重用会有所不同?

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/java-jvmneicunshiyongshikong.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:9月 23, 2019 at 10:26 下午

热评文章