天天看点

通过 JDK 常用工具监控 Java 进程的内存占用情况

本篇博文比较详细地说明了 JDK 的常用工具、GC 日志信息的查看、JMS 远程监控的使用等内容,可供初步学习 JVM 优化的开发人员参考。

目录

1 JDK 工具的使用

2 查看 GC 日志信息

3 添加 JMS 远程监控

参考资料

版权声明

Tomcat是一款常用的Web容器, 它是运行在 JVM(Java Virtual Machine) 中的一个Java进程. 本文以Tomcat为例, 借助一些JDK的工具对Tomcat在运行过程中的内存占用情况进行监控, 为优化提供数据支撑.
JDK自带的工具位于<code>${JAVA_HOME}/bin/</code>目录下.

JConsole 可以简单明了地查看到内存的使用情况, 线程的状态, 当前加载的类的总量等.

JVisualVM 可以下载插件(如GC等), 进而查看更丰富的信息. 如果是分析本地的Tomcat的话, 还可以进行内存抽样等, 检查每个类的使用情况.

(1) jps 查看本地运行着的 Java 进程, 及其进程号、进程启动的路径等信息;

通过 JDK 常用工具监控 Java 进程的内存占用情况

(2) jmap 查看垃圾收集策略即 JVM 内存占用情况:

<code>jmap -heap pid</code> # 查看垃圾收集策略, 以及堆内存的分配与使用情况. <code>jmap -clstats pid</code> # 查看类加载器的统计数据 —— 此命令调用了<code>sun.jvm.hotspot.runtime.VM.initialize()</code> 方法, 会导致该 pid 对应的 JVM 进程阻塞. <code>jmap -histo [pid]</code> # 按照内存使用大小倒序列出内存中的实例类型.

(3) jstack 查看线程栈:

<code>jstack pid</code> # 列出该 pid 对应 JVM 的所有线程栈描述, 主要包括每个线程的状态以及堆栈内各栈帧的方法全限定名、代码位置. 注意: 这些信息的显示只是为了便于开发人员阅读, 并不是栈中存的就是这些信息.

(4) jstat 实时查看堆内存的使用情况:

使用示例: 间隔5s, 每隔10条输出一次头信息, 打印进程号为3308的JVM进程的堆内存使用情况, 以及各代垃圾回收的次数及时间:

jstat -gcutil -h10 77545 5000

显示信息如下:

通过 JDK 常用工具监控 Java 进程的内存占用情况

参数说明:

可以通过配置JVM的启动参数, 打印类的加载情况及对象的回收信息, 可以打印到屏幕或指定文件中, 默认也会打印到catalina.log中. Tomcat容器的JVM启动参数配置文件是: <code>${TOMCAT_HOME}/bin/catalina.sh</code>, 具体参数如下:

对部署在局域网内其他服务器上的Tomcat, 可以打开JMX监控端口, 就可以在另外的服务器上通过该端口查看常用的参数(一些比较复杂的功能不支持).

配置方法: 同样是在JVM启动参数中配置, 配置如下:

JVM 运行时内存使用情况监控
作者: 马瘦风 出处: 博客园 马瘦风的博客 您的支持是对博主的极大鼓励, 感谢您的阅读. 本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.