Java -- 每日一问:如何监控和诊断JVM堆内和堆外内存使用?

Posted Kevin-Dev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 每日一问:如何监控和诊断JVM堆内和堆外内存使用?相关的知识,希望对你有一定的参考价值。

典型回答

了解 JVM 内存的方法有很多,具体能力范围也有区别,简单总结如下:

  • 可以使用综合性的图形化工具,如 JConsole、VisualVM(注意,从 Oracle JDK 9 开始,VisualVM 已经不再包含在 JDK 安装包中)等。这些工具具体使用起来相对比较直观,直接连接到 Java 进程,然后就可以在图形化界面里掌握内存使用情况。

以 JConsole 为例,其内存页面可以显示常见的堆内存和各种堆外部分使用状态。

  • 也可以使用命令行工具进行运行时查询,如 jstat 和 jmap 等工具都提供了一些选项,可以查看堆、方法区等使用数据。

  • 或者,也可以使用 jmap 等提供的命令,生成堆转储(Heap Dump)文件,然后利用 jhat 或 Eclipse MAT 等堆转储分析工具进行详细分析。

  • 如果你使用的是 Tomcat、Weblogic 等 Java EE 服务器,这些服务器同样提供了内存管理相关的功能。

  • 另外,从某种程度上来说,GC 日志等输出,同样包含着丰富的信息。

这里有一个相对特殊的部分,就是是堆外内存中的直接内存,前面的工具基本不适用,可以使用 JDK 自带的 Native Memory Tracking(NMT)特性,它会从 JVM 本地内存分配的角度进行解读。

你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

以上是关于Java -- 每日一问:如何监控和诊断JVM堆内和堆外内存使用?的主要内容,如果未能解决你的问题,请参考以下文章

Java -- 每日一问:后台服务出现明显“变慢”,谈谈你的诊断思路?

Java -- 每日一问:JVM优化Java代码时都做了什么?

JAVA知识每日一问:JDK和JRE的区别是什么?

Java -- 每日一问:谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?

Java -- 每日一问:Java常见的垃圾收集器有哪些?

每日灵魂一问-Node性能如何进行监控以及优化?