博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[总结]-第四章 虚拟机性能监控与故障处理工具
阅读量:6817 次
发布时间:2019-06-26

本文共 5925 字,大约阅读时间需要 19 分钟。

hot3.png

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

进入JDK安装目录

cd $JAVA_HOME/binls

输出

appletviewer   javah          jjs            jvisualvm      schemagenextcheck       javap          jmap           keytool        serialveridlj           javapackager   jmc            native2ascii   servertooljar            jcmd           jps            orbd           tnameservjarsigner      jconsole       jrunscript     pack200        unpack200java           jdb            jsadebugd      policytool     wsgenjavac          jdeps          jstack         rmic           wsimportjavadoc        jhat           jstat          rmid           xjcjavafxpackager jinfo          jstatd         rmiregistry

工具命令

名称 主要作用
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 Jps1410 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]

例如

jstat -gc 1479 250 2

输出

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.10441984.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-b01Non-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 2018Snapshot read, resolving...Resolving 3208138 objects...Chasing references, expect 641 dots.......................Eliminating duplicate references..........................Snapshot resolved.Started HTTP server on port 7000Server is ready.

浏览器访问

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/blog/1935368

你可能感兴趣的文章
pandas一些基本操作(DataFram和Series)_1
查看>>
【零基础学习iOS开发】【02-C语言】05-进制
查看>>
使用Webpack的代码分离实现Vue懒加载
查看>>
V for vendetta
查看>>
Android指南 - 样式和主题
查看>>
margin注意问题
查看>>
事物的回滚
查看>>
Xcode7 iOS9.0 的真机调试
查看>>
Constraint3:check约束 和 null
查看>>
Rocket - diplomacy - LazyModule实例:Buffer
查看>>
Fabric 1.0环境搭建
查看>>
c冒泡排序
查看>>
第十五篇、OC_同一个View实现两个手势响应
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Java软件架构设计慨论
查看>>
15-用户手册(GB8567——88)
查看>>
AS3效率优化:使用Vector数据类型
查看>>
JAVA 访问WebRoot下的目录文件
查看>>
【vue】vue +element prop用法
查看>>
leetcode1035
查看>>