JVM---性能监控与调优(概述_JVM监控及诊断工具命令行)
概述
背景说明
1、生产环境遇到的问题?
2、为什么要调优?
3、不同阶段的考虑
调优概述
1、监控的依据
2、调优的大方向
性能优化的步骤
1、性能监控(发现问题)
2、性能分析(排查问题)
3、性能调优(解决问题)
性能评价/测试指标
1、停顿时间(或响应时间)
2、吞吐量
3、并发数
同一时刻,对服务器有实际交互的请求数
4、内存占用
Java堆区所占的内存大小
JVM监控及诊断工具-命令行
概述
jps(查看正在运行的Java进程)
基本语法
常用指令:
jps -l -v、jps -l
jstat(查看JVM统计信息)
基本语法
jstat [ generalOption ] <outputOptions> <vmid> [<interval> [<count>]] generalOption:可选的通用选项。 -h 或 --help:显示帮助信息。 -J<option>:将 <option> 传递给 JVM。 outputOptions:用于指定输出格式的选项。 -class:类加载情况。 -compiler:编译器性能数据。 -gc:垃圾回收总体统计。 -gccapacity:堆内存容量信息。 -gcnew:新生代垃圾回收统计。 -gcnewcapacity:新生代区域的容量信息。 -gcold:老年代垃圾回收统计。 -gcoldcapacity:老年代区域的容量信息。 -gcutil:GC总体使用情况。 -printcompilation:热点代码方法的编译状态。 -t:在输出的第一列添加时间戳。 -verbose:gc:与 -gc 相同,但包含更详细的 GC 日志。 vmid:要监控的Java虚拟机的进程ID(PID)。 interval:可选参数,两次数据采集之间的间隔时间(以毫秒为单位)。 count:可选参数,表示要收集多少次数据。
jstat –class<pid> : 显示加载class的数量,及所占空间等信息
jstat -compiler <pid> : 显示VM实时编译的数量等信息
jstat -gc <pid>: 可以显示gc的信息,查看gc的次数,及时间
jstat -gccapacity <pid>:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
jstat -gcutil <pid>:统计gc信息
jstat -gcnew <pid>:年轻代对象的信息
jstat -gcnewcapacity<pid>: 年轻代对象的信息及其占用量
jstat -gcold <pid>:old代对象的信息
jstat -gcoldcapacity <pid>: old代对象的信息及其占用量
jstat -gcpermcapacity<pid>: perm对象的信息及其占用量
jstat -printcompilation <pid>:当前VM执行的信息
示例:
jstat -gcutil 37955 1000 100
可以比较 启动时间差 / GC时间差,计算出GC占运行时间的比例;
如果比例超过20%,说明目前堆压力比较大;如果比例超过90%,说明堆没有空间,随时会发生OOM;
jinfo(实时查看和修改JVM配置参数)
基本语法
查看
修改
拓展
jmap(导出内存映像文件&内存使用情况)
基本语法
使用
-dump 导出内存映像文件
手动方式
自动方式
-heap/histo 显示堆内存相关信息
jmap -heap pid
jmap -histo pid
“[“表示数组的意思,如果是二位数组则是“[[“, 后面跟着的字符表示具体的类型,下面罗列了所有的情况.
[Z = boolean
[B = byte
[S = short
[I = int
[J = long
[F = float
[D = double
[C = char
[L = any non-primitives(Object)
其他使用
小结
jhat(JDK自带堆分析工具)
jhat与jmap搭配使用;
用于分析jmap生成的heap dump文件;
基本语法
jstack(打印JVM中线程快照)
线程快照一般被称为threaddump或者javacore文件;
指定Java进程 当前时刻 的线程快照;
基本语法
示例:
获得某个Java进程的所有线程堆栈 jstack <pid> jstack 18528
将线程堆栈信息写入文件 jstack <pid> > <filename> jstack 18528 > thread_dump.txt
jcmd(多功能命令行)
基本语法
...
jstatd(远程主机信息收集)