目录
- 一、概述
- 1、简单命令行工具
- `二、jps:查看正在运行的Java程序(掌握)`
- 1、是什么?
- 2、测试
- 3、基本语法
- `三、jstat:查看jvm统计信息(掌握)`
- 1、是什么?
- 2、基本语法
- 3、补充
- 四、jinfo:实时查看和修改JVM配置参数
- 1、是什么?
- 2、基本语法
- 3、拓展
- 五、jmap:导出内存映像文件 & 内存使用情况
- 1、是什么?
- 2、基本语法
- 3、使用1:导出内存映像文件
一、概述
性能诊断是软件工程师在日程生活中需要经常面对和解决的问题
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
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@]<……>是为远程连接准备的
- dump 生成Java堆转储快照:dump文件(特别的: -dump:live 只保存堆中的存活对象)
- heap 输出整个堆空间的详细信息,包括GC的使用、堆配置信息,以及内存的使用信息等
- p314
3、使用1:导出内存映像文件
手动
jmap -dump:format=b,file=<filename.hprof>
自动