[总结]-第四章 虚拟机性能监控与故障处理工具

[总结]-第四章 虚拟机性能监控与故障处理工具

进入JDK安装目录java

cd $JAVA_HOME/bin
ls

输出linux

appletviewer   javah          jjs            jvisualvm      schemagen
extcheck       javap          jmap           keytool        serialver
idlj           javapackager   jmc            native2ascii   servertool
jar            jcmd           jps            orbd           tnameserv
jarsigner      jconsole       jrunscript     pack200        unpack200
java           jdb            jsadebugd      policytool     wsgen
javac          jdeps          jstack         rmic           wsimport
javadoc        jhat           jstat          rmid           xjc
javafxpackager jinfo          jstatd         rmiregistry

工具命令spring

名称 主要做用
jps JVM Process Status Tool,显示指定系统内全部的HotSpot虚拟机进程
jstat JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据
jinfo Configuration Info for Java,显示虚拟机配置信息
jmap Memory Map for Java,生成虚拟机的内存转出快照(heapdump文件)
jhat JVM Heap Dump Browser,分析heapdump文件,能够在浏览器查看结果
jstack stack trace for java,显示虚拟机的线程快照
jconsole Java监视与管理控制台
jvisualvm 多合一故障处理工具

jps

jps

输出浏览器

1794 Jps
1410 
1478 Launcher               ---> 这是IDEA工具启动的服务
1479 DemoStartApplication   ---> 这是目标Java服务
1230 Bootstrap

能够得知,当前的java服务的本地虚拟机惟一ID(LVMID)服务器

选项 做用
-q 只输出LVMID
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类全名,若是进程执行的事jar包,输出jar路径
-v 输出虚拟机进程启动时JVM参数

比较经常使用的是 jpsjps -v微信

jstat

# option=操做,interval=间隔时间,count=操做次数
jstat [option] vmid [interval] [count]

例如app

jstat -gc 1479 250 2

输出socket

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
41984.0 41472.0  0.0    0.0   810496.0 130073.9  271872.0   53990.9   71552.0 67042.8 8320.0 7480.3     19    0.259   5      0.845    1.104
41984.0 41472.0  0.0    0.0   810496.0 130073.9  271872.0   53990.9   71552.0 67042.8 8320.0 7480.3     19    0.259   5      0.845    1.104

常见参数函数

选项 做用
-class 类装载数量、卸载数量、总空间以及类状态所消耗时间
-gc 监视Java堆容量情况,包括Eden、survivor、老年代、永久代等
-gccapacity 监视Java堆最大、最小空间
-gcutil 关注已使用空间占总空间的百分比
-gccause 相似gcutil,额外输出上次GC的缘由
-gcnew 新生代GC情况
-gcnewcapacity 与-gcnew相似,输出主要关注使用到的最大、最小空间
-gcold 老年代GC情况
-gcoldcapacity 与-gcold相似,输出主要关注使用到的最大、最小空间
-gcpermcapacity 输出永久代使用到的最大、最小空间
-compiler 输出JIT编译过的方法和耗时
-printcompilation 输出已经被JIT编译的方法
-gcmetacapacity 元数据空间统计

jinfo

实时查看调整虚拟机各项参数。工具

选项 做用 案例
-flag 调整虚拟机参数 jinfo -flag +PrintGCDetails 1479
-flags 查看指定进程全部参数 jinfo -flags 1479
-sysprops 打印虚拟机进程系统内容 jinfo -sysprops 1479
无参 打印全部 jinfo 1479

例如

jinfo -flags 1479

输出

Attaching to process ID 1479, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.144-b01
Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=4 -XX:InitialHeapSize=268435456 -XX:+ManagementServer -XX:MaxHeapSize=4294967296 -XX:MaxNewSize=1431306240 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:TieredStopAtLevel=1 -XX:+TraceClassLoading -XX:+TraceClassUnloading -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseParallelGC 
Command line:  -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:51774,suspend=y,server=n -Dvisualvm.id=12693776008746 -Dserver.port=9988 -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=51773 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dfile.encoding=UTF-8

jmap

用于生成堆转储快照

  • jmap -dump 1479,输出1479虚拟机的堆转储快照。
  • -XX:+HeapDumpOnOutOfMemoryError 让虚拟机在出现OOM异常出现以后自动生成dump文件。
  • linux系统下经过Kill -3 命令发送进行退出信息“吓唬”虚拟机输出dump文件。

命令以下

选项 做用
-dump 生成堆转储快照,格式为-dump:[live,]format=b,file=<filename>,不建议使用
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象
-heap 显示java堆详细信息,回收器种类、参数配置、分代情况等
-histo 显示堆中对象统计信息,包括类、实例数量、合计容量,会先触发GC,再统计信息,不建议使用
-permstat 查看永久代内存状态,比较耗时,会暂停应用,不建议使用
-F 强制生成dump快照,当-dump失效时,再使用此命令

例如

jmap -dump:format=b,file=/Users/gy/Desktop/test 1479

输出(成功) - 输出的文件比较大,我这里有320M

Dumping heap to /Users/gy/Desktop/test ...
Heap dump file created

输出(失败) - 能够看出,没有权限访问,给目录权限或者换个有权限的目录。

Dumping heap to /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/test ...
Permission denied

jhat

虚拟机堆转储快照分析工具,这里分析jmap堆转储快照的文件

  • 缺点:耗时、耗资源,通常不会再服务器上直接分析。一把使用其余工具,好比VisualVM。
jhat /Users/gy/Desktop/test

输出

Reading from /Users/gy/Desktop/test...
Dump file created Tue Aug 28 15:59:30 CST 2018
Snapshot read, resolving...
Resolving 3208138 objects...
Chasing references, expect 641 dots.......................
Eliminating duplicate references..........................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

浏览器访问 http://localhost:7000

jstack

Java堆栈跟踪工具,生成虚拟机当前时刻的线程快照(当前虚拟机内每一条线程正在执行的方法堆栈集合)

主要目的:定位线程出现长时间停顿的缘由,如线程间死锁死循环请求外部资源致使的长时间等待等。

选项 做用 案例
-m 若是调用本地方法,则显示C/C++的堆栈 jstack -m 1479
-l 除堆栈外,显示关于锁的附加信息 jstack -l 1479
-F 当正常输出的请求不被响应时,强制输出线程堆栈 jstack -F 1479

jconsole

# 启动
./jconsole
  • 概览
    • 堆内存使用量
    • 线程
    • CPU占用率
  • 内存
    • 堆内存使用量
    • 非堆内存使用量(方法区)
    • 内存池“PS Old Gen”
    • 内存池“PS Eden Space”
    • 内存池“PS Survivor Space”
    • 内存池“Metaspace”
    • 内存池“Code Cache”
    • 内存池“Compressed Class Space”
  • 线程
    • 线程数图表
    • 全部线程
    • 检查死锁
    • 已加装当前类
    • 已加载类总数
    • 已卸载类总数
  • VM概要
VM 概要
2018年8月28日 星期二 下午01时59分33秒 CST

链接名称: pid: 1479 com.raising.modules.DemoStartApplication
虚拟机: Java HotSpot(TM) 64-Bit Server VM版本 25.144-b01
供应商: Oracle Corporation
名称: 1479@marshaldeMacBook-Pro.local
运行时间: 1 小时 47 分钟
进程 CPU 时间: 49.067 秒
JIT 编译器: HotSpot 64-Bit Tiered Compilers
总编译时间: 3.258 秒
 
活动线程: 98
峰值: 101
守护程序线程: 34
启动的线程总数: 176
已加装当前类: 11,092
已加载类总数: 11,505
已卸载类总数: 413

当前堆大小: 129,701 KB
最大堆大小: 3,728,384 KB
提交的内存: 1,123,840 KB
暂挂最终处理: 0对象
垃圾收集器: 名称 = 'PS MarkSweep', 收集 = 5, 总花费时间 = 0.844 秒
垃圾收集器: 名称 = 'PS Scavenge', 收集 = 19, 总花费时间 = 0.259 秒
 
操做系统: Mac OS X 10.13.3
体系结构: x86_64
处理程序数: 8
提交的虚拟内存: 10,287,160 KB
总物理内存: 16,777,216 KB
空闲物理内存: 622,636 KB
总交换空间: 1,048,576 KB
空闲交换空间: 1,011,968 KB
 
VM 参数: ...
类路径: ...
库路径: ...
引导类路径: ...
  • MBean

jvisualvm

  • OQL控制台
  • BTrace动态日志跟踪【插件】

博客

https://my.oschina.net/gmarshal

欢迎关注个人我的微信订阅号:(听说这个头像程序猿专用)

输入图片说明

相关文章
相关标签/搜索