《Java性能权威指南》笔记----Java性能调优工具
OS
1、CPU
用户态时间(us):cpu执行应用代码所占时间的百分比。
内核态时间(sy):cpu执行内核代码所占时间的百分比,系统态时间与应用相关。
空闲时间(id):cpu空闲时间百分比。空闲可能的原因:
1、应用被同步原语阻塞、等待锁释放
2、应用等待某些东西,例如:查询数据库并等待返回结果
3、应用的确无所事事
运行队列(r):所有正在运行和就绪状态(一旦有可用cpu就可以运行)的线程数。该数据最好小于或等于CPU个数,否则性能就可能会下降。如果长时间运队列过长,则可能是系统过载。
命令:vmstat 1 一秒内的CPU的占比
调优的目的:在尽可能短的时间内让cpu的利用率尽可能高。
2、IO
命令:iostat -xm 5
%util:IO时间占总时间的百分比。暗示了设备的繁忙程度。一般地,达到100%时表示设备已经接近满负荷运行了(如果是多磁盘,即使100%,由于磁盘的并发能力,索引磁盘未必达到瓶颈)
r/s和w/s:每秒读/写次数
rMB和wMB/s:每秒读/写大小
await:IO平均等待时间
Java
1、VM信息
jcmd可用来查找运行的应用所在JVM的基本信息,包括所有调优标识的值。
jcmd 56062 VM.uptime 虚拟机运行时长
jcmd 56062 VM.system_properties 虚拟机系统属性
jcmd 56062 VM.system_version JVM版本
jcmd 56062 VM.command_line JVM命令行
jcmd 56062 VM.flags [-all] JVM调优标识
java -XX:+PrintFlagsInitial 可输出标志的默认值。
jinfo在检查单个标志时(可以修改标记为manageable的标志)很有用。
jinfo -flags 56062 获取进程中所有标志的值
jinfo -flag PrintGCDetails 56062 获取单个标志的值
2、线程信息
jstack 56062 或 jcmd 56062 Thread.print
3、类信息和实时GC
jstat
4、堆转储
jmap
性能分析工具
1、采样分析器
2、探查分析器
3、本地方法和线程时间线
4、本地分析器