JConsole:Java监视与管理控制台
通过JDK/bin目录下的jconsole.exe启动
1.内存监控:相当于可视化的jstat命令
监控区域有
PS Eden Space
PS Survivor Space
PS Old Space
Metaspace
Code Cache
Compressed Class Space
2.线程监控:相当于可视化的jstack命令
JHSDB:基于服务性代理的调试工具(java9)JCMD、JHSDB整合了上一篇的命令
HSDB图形界面启动方式
java9: jhsdb hsdb --pid LVMID
java8:在JDK/lib目录下命令行执行:
java -cp ./sa-jdi.jar sun.jvm.hotspot.HSDB 或java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB
点击File-》Attach to Hotspot Process,输入进程ID
Java Threads窗口:
1:Inspect Thread:查看选中的线程对应的java.lang.Thread对象,可层级查看,输入地址查看
2:Stack Memery:查看当前线程的调用栈的内存,第一列是虚拟内存地址,第二列是该内存地址上的数据,第三列是对内存数据的注释,Interpreted frame表示一个调用栈帧
3:show Java stack trace:显示当前线程的调用链
4:Show thread infomation:查看指定线程的信息
5:find crashes:查找崩溃的线程
Tools 选项
1:Class Browser:查看类,可用完整类名查询2:Code Viewer--根据内存地址查看信息
3:Computes Reserves ptrs:根据对象地址查找指向该对象的引用的地址
4:Deadlock Detection:用于死锁检测
5:Heap Paramters:显示年轻代和老年代的内存地址范围
6:Inspector:输入对象的内存地址,可查看该对象的所有属性信息
7:Monitor Cache Dump:查看当前进程使用的ObjectMonitor(用于synchronized 同步)的情况
8:Object Histogram:查看所有对象的对象数量及其占用的内存空间的统计,可搜索指定类
windows选项
1:console:hsdb命令行控制台,即hsdb的命令行版本CLHSDB
可用命令进入:
java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.CLHSDB
有如下命令
threads
thread 1
classes
class com.test.A
inspect
jstack
universe: 同Heap Paramtersscanoops 指定地址范围内搜索所有指定类型的所有实例
revptrs: 根据对象地址查看引用该对象的活跃对象的地址,这里的引用是指通过类全局属性(局部在线程中查看)
print: 输入Klass*, Method*的地址,可以打印该类或者方法,效果等同于Code Viewer选项
where threadid: 查看线程调用栈,具体到方法
JAVA VisualVM(jvisualvm):
多合-故障处理工具
对性能影响小,需插件支持,插件网址访问不了
通过JDK/bin目录下的jvisualvm.exe启动
基本功能
1: 监视--相当于可视化的jstat命令
2:线程--相当于可视化的jstack命令
3:抽样器--主要查看实列分配数量,生产堆dump文件
4:prafiler--运行期间方法执行时间以及内存分析
抽样器-堆dump,在左侧对应进程下生成heapdump文件快照,可增量对比,可另存
Java Mission Contrlo(JMC):可持续在线的监控工具
通过JDK/bin目录下的jmc.exe启动
Java Flight Recorder(JFR)--飞行记录仪:
内建在HotSpot虚拟机里面的监控和基于事件的信息搜集框架,对性能影响小
JMC一方面作为JMX控制台,显示来自虚拟机MBean提供的数据;另一方面作为JFR的分析工具,展示来自JFR的数据
文件--------连接前程序需要配置系统参数
elicpse debug configurations vm arguments
多个空格
-Dcom.sun.management.jmxremote=true -Djava.rmi.server.hostname=ip
// 本地不需要
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.managementote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-XX:+UnlockCommercialFeatures
-XX:+FlightRecorder// 取消锁定商业功能
JConsole,jvisualvm 连接远程需要配置tomcat的catalina.sh配置文件或者命令运行jar指定参数
-Djava.rmi.server.hostname=ip
#远程服务器ip
-Dcom.sun.management.jmxremote
#开启jmx
-Dcom.sun.management.jmxremote.port=999
#自定义jmx 端口号
-Dcom.sun.management.jmxremote.ssl=false # 是否需要ssl 安全连接方式
-Dcom.sun.management.jmxremote.authenticate=false
#是否需要秘钥
上面的是不需要密码的 生产环境不安全 如果想设置密码
1.进入$JAVA_HOME/jre/lib/management把jmxremote.password文件的后缀去掉,然后修改至600权限
2.chmod 600 jmxremote.access 打开编辑到最后
#monitorRole ROF
#controlRole R&D
去掉# 保存 (前面是用户名,后面是密码 可自己修改 用户在同目录 jmxremote.access文件内定义,默认有2个用户,可定义权限)