java - 使用 Jconsole 处理内存泄漏

标签 java spring tomcat memory-leaks jconsole

我正在尝试诊断 J2EE 服务器中的一些内存问题。我已经在我们的实时服务器上设置了 jconsole,我正在尝试通过它来监控 tomcat 服务器的状态。我有一个关于 jconsole 中的“线程”选项卡的快速问题。我可以在线程列表中看到一个名为 Finalizer 的线程。此线程中的“总阻塞”数量不断增加。例如,现在是 4,049,一小时前是 3,867。

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

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

目前我的服务器的最大堆大小为 200MB,堆大小保持在 100 到 150 MB 之间,当我单击“执行 GC”时,我可以看到一些堆空间被释放。但是,这不会改变 Windows 任务管理器中这个 tomcat 进程占用的内存量,目前它消耗了超过 700 MB。

任何关于我应该如何去做的提示将不胜感激。如果您需要有关我的服务器设置的更多信息,请向我提问。

提前致谢。

最佳答案

我想我已经找到了问题的答案。 “总阻塞”和“总等待”只是线程等待或被阻塞的次数。 JConsole 正在从 ThreadInfo 获取此信息.

Blocked count is the total number of times that the thread blocked to enter or reenter a monitor. I.e. the number of times a thread has been in the java.lang.Thread.State.BLOCKED state.

Waited count is the total number of times that the thread waited for notification. i.e. the number of times that a thread has been in the java.lang.Thread.State.WAITING or java.lang.Thread.State.TIMED_WAITING state.

关于java - 使用 Jconsole 处理内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4181847/

相关文章:

java - 正则表达式仅在字符串之后匹配重复模式

java - 如何阻止 DefaultListableBeanFactory 隐式创建 LocalValidatorFactoryBean 实例

java - 使用java spring和GMail发送电子邮件

java - 已为此响应调用 getOutputStream()

java - 响应处理完成前的错误页面

tomcat的docker文件

java - java中打印整数的语法是什么

java - 无法在单个 dex 文件中容纳请求的类(#methods : 86010 > 65536)

java - 交换变量时奇怪的 java for-each 行为

java - 如何在类路径之外覆盖 spring Activity 配置文件?