目录
- 一、概述
- 1、简单命令行工具
- `二、jps:查看正在运行的Java程序(掌握)`
- 1、是什么?
- 2、测试
- 3、基本语法
- `三、jstat:查看jvm统计信息(掌握)`
- 1、是什么?
- 2、基本语法
- 3、补充
- 四、jinfo:实时查看和修改JVM配置参数
- 1、是什么?
- 2、基本语法
- 3、拓展
- 五、jmap:导出内存映像文件 & 内存使用情况
- 1、是什么?
- 2、基本语法
- 3、使用
- 1)`导出内存映像文件`
- 2、显示堆内存相关信息
- 4、小结
- 六、jhat (不使用了)
- 1、是什么?
- 2、基本语法
- 七、jstack 打印Jvm的线程快照
- 1、是什么
- 2、基本语法
- 八、jcmd 多功能命令行
- 九、jstatd 远程主机信息收集
一、概述
性能诊断是软件工程师在日程生活中需要经常面对和解决的问题
Java作为最流行的编程语言之一,其应用性能诊断一直收到业内广泛关注。造成Java应用出现性能问题的因素非常多,例如线程控制,磁盘读写,数据库访问,网络io,垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。
1、简单命令行工具
jdk的bin目录下,有一系列的辅助命令行工具,这些辅助工具用来获取 Jvm不同方面,不同层次的信息,帮助开发人员很好的解决Java应用程序的一些疑难杂症。例如 jinfo 、jconsole、javap …
二、jps:查看正在运行的Java程序(掌握)
1、是什么?
Java Process Status:用于查询正在运行的Java虚拟机进程
2、测试
3、基本语法
1)options
如何将信息输出到同级文件中:
语法:命令 > 文件名称
例如:jps -l > a.txt
三、jstat:查看jvm统计信息(掌握)
1、是什么?
jstat (JVM statistics Monitor tool ): 用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据
在没有GUI的图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具,常用于检测垃圾回收问题以及内存泄漏问题
2、基本语法
基本语法: 使用jstat查看语法格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
其中vmid是进程id号,也就是jps之后看到的前面的号码,如下:
1)options参数
-
-gc
其中S0C代表幸存者0区的总容量,
S1C代表幸存者1区的总容量,
S0U代表幸存者0区使用的容量,
S1U代表幸存者1区使用的容量,
EC代表伊甸园区的总容量,
EU代表伊甸园区使用的总容量,
OC代表老年代的总容量,
OU代表老年代已经使用的容量,
MC代表方法区的总容量,
MU代表方法区的总容量,
CCSC代表压缩类的总容量,
CCSU代表压缩类使用的容量,
YGC代表年轻代垃圾回收的次数,
YGCT年轻代进行垃圾回收需要的时间,
FGC代表代表Full GC的次数,
FGCT代表Full GC的时间,
GCT代表垃圾回收的总时间 -
-gccapacity举例:jstat -gccapacity 13152,其中13152代表类的进程id,执行结果如下:
其中S0C代表幸存者0区的容量,
S1C代表幸存者1区的容量,
EC代表伊甸园区的容量,
CCSC代表压缩类的容量,
YGC代表年轻代垃圾回收的时间,
FGC代表Full
GC垃圾回收的时间
- gcutil举例:jstat -gcutil 13152,其中13152代表类的进程id,执行结果如下所示:
以上是各区域占比以及垃圾回收的情况,
S0代表幸存者0区,
S1代表幸存者1区,
E代表伊甸园区,
O代表老年代,
M代表方法区,
CCS代表压缩类,以上这些值都是占比情况,
YGC代表年轻代垃圾回收的次数,
YGCT年轻代进行垃圾回收需要的时间,
FGC代表代表Full GC的次数,
FGCT代表Full GC的时间,
GCT代表垃圾回收的总时间
2)-t 参数
可以在输出信息前加上一个 TimeStamp列,显示程序的运行时间。单位秒
【经验】
jstat -gc -t 35812 1000
如果让左边框框中的某两个值相减,假设这个值是num1,然后让对应右边框框中的另外两个值相减,假设这个值是num2,之后让num2/num1,得出的差值就是上述所说的GC时间占运行时间的比例
3)-h
可以在周期性数据输出时,输出多少行数据后输出一个表头信息
4)interval 参数
用于指定输出统计数据的周期,单位为毫秒秒(查询间隔)
5)count 参数
用于指定查询的总次数
3、补充
四、jinfo:实时查看和修改JVM配置参数
1、是什么?
2、基本语法
查看
jinfo -flags 进程id
查看曾经赋过值的一些参数
jinfo -flag 参数名称 进程id
查看某个java进程的具体参数信息
修改
针对boolean类型:jinfo -flag [+|-]参数名称 进程id
针对非boolean类型: jinfo -flag 参数名称=参数值 进程id
3、拓展
java -XX:+PrintFlagsInitial 查看所有JVM参数启动的初始值
java -XX:+PrintFlagsFinal 查看所有JVM参数的最终值
五、jmap:导出内存映像文件 & 内存使用情况
1、是什么?
2、基本语法
使用语法可以通过在DOS窗口中使用jmap/jmap -h/jmap -help查看
<executable 代表可执行的代码,比如使用> 文件名称来指定生成的dump文件的生成位置
[server_id@]<……>是为远程连接准备的
3、使用
1)导出内存映像文件
手动
jmap -dump:format=b,file=xxx.hprof pidjmap -dump:live,format=b,file=xxx.hprof pid 【基本使用这个】
自动
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=xxx.hprof
2、显示堆内存相关信息
jmap -heap 进程id
jmap -histo 进程id
4、小结
六、jhat (不使用了)
1、是什么?
2、基本语法
七、jstack 打印Jvm的线程快照
1、是什么
2、基本语法
参数:option:
八、jcmd 多功能命令行
九、jstatd 远程主机信息收集
demo:
https://blog.csdn.net/huanqingdong/article/details/104095402/