进入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
输出浏览器
1794 Jps 1410 1478 Launcher ---> 这是IDEA工具启动的服务 1479 DemoStartApplication ---> 这是目标Java服务 1230 Bootstrap
能够得知,当前的java服务的本地虚拟机惟一ID(LVMID)服务器
选项 | 做用 |
---|---|
-q | 只输出LVMID |
-m | 输出虚拟机进程启动时传递给主类main()函数的参数 |
-l | 输出主类全名,若是进程执行的事jar包,输出jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
比较经常使用的是 jps
和jps -v
微信
# 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 | 元数据空间统计 |
实时查看和调整虚拟机各项参数。工具
选项 | 做用 | 案例 |
---|---|---|
-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
用于生成堆转储快照
命令以下
选项 | 做用 |
---|---|
-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
虚拟机堆转储快照分析工具,这里分析jmap堆转储快照的文件
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
Java堆栈跟踪工具,生成虚拟机当前时刻的线程快照(当前虚拟机内每一条线程正在执行的方法堆栈集合)
主要目的:定位线程出现长时间停顿的缘由,如线程间死锁
、死循环
、请求外部资源致使的长时间等待
等。
选项 | 做用 | 案例 |
---|---|---|
-m | 若是调用本地方法,则显示C/C++的堆栈 | jstack -m 1479 |
-l | 除堆栈外,显示关于锁的附加信息 | jstack -l 1479 |
-F | 当正常输出的请求不被响应时,强制输出线程堆栈 | jstack -F 1479 |
# 启动 ./jconsole
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 参数: ... 类路径: ... 库路径: ... 引导类路径: ...
https://my.oschina.net/gmarshal
欢迎关注个人我的微信订阅号:(听说这个头像程序猿专用)