监控每个线程的内存使用情况
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 是最简单的选择
【讨论】:
以上是关于监控每个线程的内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章