通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令

1、Jconsole介绍

Jconsole 是一个内置 Java 性能分析器,是基于Java Management Extensions (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来对Java进程提供实时的性能和资源的监控。其监控内容包括:内存、线程、类、CPU使用(Java进程的内存使用,线程的状态,类的使用)等。通过监控信息,可以很清晰的了解到当前程序是否运行正常,如内存泄露、死锁、类加载异常等。

备注:Jconsole管理内存相当于可视化的jstat命令

2、Windows监控本地的JVM

2.1、首先需要配置JAVA环境

2.2、进入jconsole目录,路径:%JAVA_HOME%/bin下面的jconsole,双击jconsole.exe,弹出页面

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第1张图片

 2.3、在上面界面中的本地进程中,选择需要监控的JAVA进程,点击连接

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第2张图片

2.4、可以看到堆内存使用量,线程,CPU使用率等。

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第3张图片

 3、Jconsole监控远程Java进程的JVM(示例Tomcat)

远程服务器:centos7   中间件:Tomcat

3.1、服务端Tomcat配置

1、Tomcat的catalina.sh需要配置,重启tomcat

JAVA_OPTS="$JAVA_OPTS  -Djava.rmi.server.hostname=10.1.1.145"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.rmi.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"

备注

JAVA_OPTS="$JAVA_OPTS  -Djava.rmi.server.hostname=10.1.1.145"   //指定jconsole连接的IP

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.port=9000" //指定jconsole连接端口

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.rmi.port=9000"  //这句一定要添加,不添加就无法成功

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.ssl=false"  //关闭ssl认证

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"  //关闭用户密码认证

2、修改/etc/hosts

注释掉127.0.0.1  

新增:10.1.1.145  localhost localhost.localdomain

 3、查看9000端口是否有

$netstat -ntlp

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第4张图片

3.2、Jconsole监控

远程连接:10.1.1.145:9000

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第5张图片

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第6张图片

JConsole使用密码进行访问

1、服务端配置中修改:authenticate=true

   -Dcom.sun.management.jmxremote.authenticate=true

   -Dcom.sun.management.jmxremote.pwd.file=     //指定正确的密码文件

JAVA_OPTS="$JAVA_OPTS  -Djava.rmi.server.hostname=10.1.1.145"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.rmi.port=9000"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.authenticate=true"

JAVA_OPTS="$JAVA_OPTS  -Dcom.sun.management.jmxremote.pwd.file=/home/cg/java/jdk1.8.0_221/jre/lib/management/jmxremote.password"

2、Jdk/jre/lib/management下的jmxremote.password.template,拷贝一份叫jmxremote.password。进去将内容全部删去,添加一行

monitorRole  123456   //(用户名,密码)

controlRole   123456  //(用户名,密码)

备注:monitorRole  和monitorRole  用户已在jmxremote.access配置(模板)

3、将jmxremote.password和jmxremote.access改成600权限,和所属该程序用户

chmod 600 jmxremote.access  jmxremote.password

4、JConsole里需要添加用户名密码才能访问(例如:controlRole/123456)

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第7张图片

 通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第8张图片

 如果不输入用户名密码,那么无法连接

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第9张图片

参考:https://www.linuxidc.com/Linux/2015-02/113419.htm

https://blog.csdn.net/luosai19910103/article/details/75976929

深入理解java虚拟机(全章节完整)

4、jstat命令

监视虚拟机运行时的状态信息,包括监视类装载、内存、垃圾回收、jit编译信息。官方文档有操作命令:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

jstat -gcutil 36507 1000 10     每隔1000毫秒执行一次 10次

# 36507代表进程,查询进程$ps -ef |grep java

通过Jconsole监控本地和远程Java进程JVM(Tomcat示例)和jstat命令_第10张图片

S0C:第一个幸存区的大小
S1C:第二个幸存区的大小
S0U:第一个幸存区的使用大小
S1U:第二个幸存区的使用大小
EC:Eden区的大小
EU:Eden区的使用大小
OC:老年代大小
OU:老年代使用大小
MC:方法区大小
MU:方法区使用大小
CCSC: 压缩类空间大小
CCSU: 压缩类空间使用大小
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

参考:https://www.zhihu.com/question/484272920/answer/2502988844

你可能感兴趣的:(java相关,#,性能测试,jvm,java,开发语言)