使用Jconsole进行内存泄漏

Sil*_*ker 11 java spring tomcat memory-leaks jconsole

我正在尝试在J2EE服务器中诊断一些内存问题.我在我们的实时服务器上设置了jconsole,我正试图通过它监视tomcat服务器的状态.我有一个关于jconsole中Threads选项卡的快速问题.我可以在线程列表中看到一个名为Finalizer的线程.此线程中的"Total blocked"数字不断增加.例如,它现在是4,049,一小时前它是3,867.

Name: Finalizer
State: WAITING on java.lang.ref.ReferenceQueue$Lock@1b79cfd
Total blocked: 4,049 Total waited: 1,579

这个线程是什么意思?它是否与GC有关?我已经下载了一个堆转储,它显示了待完成的对象数量为零.

我的服务器的最大堆大小目前是200MB,堆大小保持在100到150 MB之间,当我点击'Perform GC'时,我可以看到一些堆空间被释放.但是,这并没有改变这个tomcat进程在Windows任务管理器中占用的内存量,它现在消耗超过700 MB.

任何关于我应该怎么做的提示都将非常感激.如果您需要有关我的服务器设置的更多信息,请向我提问.

提前致谢.

Sil*_*ker 11

我想我找到了问题的答案.'Total blocked'和'Total waited'只是线程等待或被阻止的次数的计数.JConsole从ThreadInfo获取此信息.

阻止计数是线程阻止进入或重新进入监视器的总次数.即线程处于java.lang.Thread.State.BLOCKED状态的次数.

等待计数是线程等待通知的总次数.即线程在java.lang.Thread.State.WAITING或java.lang.Thread.State.TIMED_WAITING状态中的次数.