《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、本地分析器

 

posted @ 2017-09-20 16:02  在周末  阅读(449)  评论(0编辑  收藏  举报