Jconsole 是一个内置 Java 性能分析器,是基于Java Management Extensions (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来对Java进程提供实时的性能和资源的监控。其监控内容包括:内存、线程、类、CPU使用(Java进程的内存使用,线程的状态,类的使用)等。通过监控信息,可以很清晰的了解到当前程序是否运行正常,如内存泄露、死锁、类加载异常等。
备注:Jconsole管理内存相当于可视化的jstat命令
2.1、首先需要配置JAVA环境
2.2、进入jconsole目录,路径:%JAVA_HOME%/bin下面的jconsole,双击jconsole.exe,弹出页面
2.3、在上面界面中的本地进程中,选择需要监控的JAVA进程,点击连接
2.4、可以看到堆内存使用量,线程,CPU使用率等。
远程服务器:centos7 中间件: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" //关闭用户密码认证
注释掉127.0.0.1
新增:10.1.1.145 localhost localhost.localdomain
3、查看9000端口是否有
$netstat -ntlp
远程连接:10.1.1.145:9000
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)
如果不输入用户名密码,那么无法连接
参考:https://www.linuxidc.com/Linux/2015-02/113419.htm
https://blog.csdn.net/luosai19910103/article/details/75976929
深入理解java虚拟机(全章节完整)
监视虚拟机运行时的状态信息,包括监视类装载、内存、垃圾回收、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
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