监控每个线程的内存使用情况

Posted

技术标签:

【中文标题】监控每个线程的内存使用情况【英文标题】:Monitor memory usage per thread 【发布时间】:2012-08-07 07:39:52 【问题描述】:

如何监控应用程序每个线程的内存使用情况? 我尝试了 VisualVM,但它说内存采样不可用。 我还能尝试什么? (注意我使用的是 IBM JDK)

【问题讨论】:

您的意思是“每个线程”。线程的堆栈大小?因为堆在所有线程之间共享,可能很难分开。 @Thilo:如果可能的话是堆,否则堆是如何为线程划分的 所有内存都可以被所有线程访问。只有堆栈是真正的线程本地的。如果您想监控哪些代码创建的对象最多,我建议使用商业内存分析器,例如 YourKit(评估许可证是免费的) @Jim - Thilo 说堆不是为线程划分的。它们都使用相同的堆。线程可以直接或间接共享对象,没有办法决定哪个线程“拥有”什么。 我意识到这是旧的,但是对于 Oracle 1.7 VM,使用 VisualVM 采样确实显示了每个线程的内存分配。它显示了每个线程的总分配字节数表,以及以字节/秒为单位的当前分配率。您无法检查在该线程中创建了哪些对象,但它可以帮助突出显示有助于您追踪问题的线程。 【参考方案1】:

使用 JAVA_HOME\bin 中的 jconsole 或 JVM Monitor 工具。

【讨论】:

【参考方案2】:

YourKit 是最简单的选择

【讨论】:

以上是关于监控每个线程的内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章

监控 Java 应用程序自己的内存使用情况

监控自身进程的内存使用情况

Erlang 线程的内存监控工具

有没有办法查看每个线程的进程的虚拟内存使用情况?

jvm调试工具类使用 (jvisualvm.exe)

如何用java代码来监控系统内存·cpu·线程占用情况,并生成日志