Java性能优化学习-操作系统性能监控

关键:

        找到性能极限的关键在于知道应该监控哪些数据、监控软件栈的哪些部分以及使用哪些工具.找到性能问题的第一步就是监控应用的行为。通过监控提供的线索,对性能问题进行归类。

改善性能设计到3中不同的活动:

1.性能监控。 以非侵入式方式手机或查看应用运行性能数据的活动。监控通常是值一种在生产、质量评估或开发环境中实施的带有预防或主动向的活动,在报出性能问题却没有定位到性能问题的根本原因的线索时,首先进行性能监控,然后是性能分析。

2.性能分析。性能分析是一种以侵入方式收集运行性能数据的活动,它会影响应用的吞吐量或响应性。性能分析是对性能监控所报出问题的回应,关注的范围通常比性能监控更集中,性能分析通常很少在生产环境中进行,通常是在质量评估、测试、开发环境中,常常是性能监控之后的行动。

3.性能调优。性能调优是一种改善应用响应性或吞吐量而更改参数、源代码或属性配置的活动。性能调优通常在性能监控或性能分析之后进行。

CPU使用率

要使应用性能或扩展性达到最高,就必须充分利用分配给它的CUP周期。在操作系统上监控CPU使用率。大多数的操作系统的CPU使用率分为用户态CPU使用率和系统态CPU使用率。用户态CPU使用率是指执行应用程序代码的时间占总CPU使用的百分比,系统态CPU使用率是指执行操作系统调用的时间占总CPU时间的百分比。系统态CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量交互。理想情况是降低系统态CPU使用率,以提高系统性能和扩展性为目标。

对于计算密集型应用来说,不仅要监控用户态和系统态CPU使用率,还要进一步监控每时钟指令数IPC或每指令时钟周期CPI等指标。这两个指标对于计算密集型应用来说很重要,现在系统自带的CPU使用率监控工具只能报告CPU使用率,没有CPU执行指令占用CPU时钟周期的百分比。这意味着CPU在等待内存中的数据是,操作系统工具任然会报告CPU繁忙。这种情况通常称为停滞Stall。当CPU执行指令而所用的操作数据不再寄存器中时,就会发生停滞stall。由于指令执行前必须等待数据中内存装入CPU寄存器,所以一旦发生停滞,就会浪费时钟周期。CPU停滞通常会浪费好几百个时钟周期。因此计算密集型型应用性能调优的策略就是减少停滞或者改善CPU高速缓存使用率,从而减少CPU在等待内存数据时浪费的时钟周期。我们可以使用Oracle Solaris Studio Performance Analyzer来抓取这方面的数据

window下监控CPU使用率工具:windows typeperf



C:\Users\mengdeyu>typeperf "\Processor(_Total)\% Privileged Time" "\Processor(_T
otal)\% User Time"


"(PDH-CSV 4.0)","\\MENGDEYU-PC\Processor(_Total)\% Privileged Time","\\MENGDEYU-
PC\Processor(_Total)\% User Time"
"04/13/2015 20:52:53.530","2.339890","1.559923"
"04/13/2015 20:52:54.531","1.558363","2.727138"
"04/13/2015 20:52:55.532","2.337549","1.947959"
"04/13/2015 20:52:56.533","2.337549","0.779186"


监控LinuxCPU使用率工具 GNOME System Monitor、xosview 


linux下命令行工具 vmstat监控


us、sy以及id分别显示用户态、系统态和空闲CPU使用率情况


mpstat命令以列表形式展示每个虚拟处理器的CPU使用率

linux下还有Top代替vmstat,solaris下prstat代替。top不仅包括CPU使用率统计还包括进程统计数据和内存使用率统计


prstat不像top那样显示整个系统的概要信息,但可以更精细的监控CPU使用率,例如用户态CPU使用率、系统态使用率(用prstat -m 和-L选项可以得到更多信息,-m选项打印详细信息,而-L打印轻量级的统计信息)

当你想隔离每个轻量级进程和java线程的CPU使用率时,可以使用-m -L选项。prstat -mL中CPU使用率高的java进程,可以使用prstat、pstack和java6中的jstack经过一系列步骤映射为Solaris的Java进程和线程。比如 prstat -mL 5 输出,id为3897的进程中有3个轻量级进程,平均小号了大约5%的系统态CPU。



一但定位到具体的java线程,结合附带的栈追踪信息就能进行更彻底的性能分析。



你可能感兴趣的:(JVM虚拟机调优)