Vtune 是 intel 的一款性能分析工具,其既可以分析某种应用的特性,也可以检测整个系统的特性,能够找出热点瓶颈的所在,给开发者提供良好的优化思路。
Vtune 有 windows 版本和 linux 版本,有收费的,试用的,免费的。本人使用的是一款试用版本, vtune 地址 http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ ,下载前需要注册账号,得到序列号,安装的时候需要用到。
安装 vtune 需要在 root 账号下,或者使用 sudo 进行安装,安装成功后,需要将用户加到 vtune 这个 group 下,才能够使用 vtune 。 Usermod –aG vtune user
3.1 分析应用程序
amplxe-cl -collect hotspots -r test_hot ./test
通过上面的命令可以收集到 test 应用的热点数据,保存在 test_hot 目录下。还可收集 locksandwaits , lightweight-hotspots 等类型数据,具体可以使用 amplxe-cl –help 查看详细方法,或者 man amplxe-cl, 当然 source /opt/intel/vtune_amplifier_xe_2011/amplxe-vars.sh( 这是 vtune 的安装成功后得到的文件 ) 之后, vtune 命令才能够直接用
需要注意的是,在检测java应用的时候,如果需要得到 jit 的信息,在运行前,需要设置环境变量 export AMPLXE_EXPERIMENTAL=1
3.2 Amplxe-runsa 和 Amplxe-runss
Amplxe-runsa ,系统模式的性能分析; Amplxe-runss ,用户模式的性能分析。
Amplxe-runsa 能够分析出整个系统的热点瓶颈,使用实例如下所示,其中 test 为收集数据目录。amplxe-runsa –target=host -r ./test
Amplxe-runss 分析的是用户模式下的热点瓶颈,使用实例如下, test 为数据数据目录, app 为应用。amplxe-runss -r test -- app
amplxe-runss 可以 attach 到某个进程上去,进行监测收集。amplxe-runss –t cpu –r ./test -target-pid=<integer> -interval=<integer>
3.3 生成统计数据
用命令行生成统计结果, amplxe-cl -report hotspots -r test_hot -report-out test_out ,其中 hotspots 为上面 collect 的收集数据类型, test_hot 为收集数据的目录 test_out 为统计的结果文件。
用 vtune 自带的图形工具查看结果,例如在 ubuntu 下,使用 ampx-cl-gui 。在图形界面下看到的数据会丰富一些,有助于分析,例如能够看到 CPI 等信息。
Amplxe-cl,amplxe-runss,amplxe-runsa 都可以 attach 一个进程, -target-pid=integer, 但是出来的 report 是没有 jit 信息 的,用 vtune 起动的应用,最终才会生成带 jit信息 的report
Specjbb lightweight-hotspots
Using result path `/home/xxx/test/specjbb2005/specjbb_hot'
Executing actions 16 % Loading data files
Warning: Cannot load data file `/home/xxx/test/specjbb2005/specjbb_hot/d ata.0/tbs1381903680.tb6' (tbrw call "TBRW_dobind(tbrwFile->getHandle(), streamIn dex)" failed: Invalid sample file (24)).
Executing actions 50 % done
Error: Error 0x4000001e (Cannot load raw collector data)
上面的报错是因为sample 数量太多了,因此在生成lightweight -hotspots的时候会出错,在减少采样的情况下,可以避免上面的错误
解决办法 :
加参数 -target-duration-type=medium, 这时产生的结果数据文件较大, windows 下 vtune gui 打开很长时间没有反应
将参数设置为 -target-duration-type=long ,这是产生的文件会小一些, vtune gui 打开就没什么问题了。
实际上还有个参数 -duration xxx , xxx 单位为 seconds ,就是让 vtune 检测 xxx 这些秒,将数值设置得小一些,也可以达到上面的效果,不过只是监控了程序的一部分,应用程序没有完全跑完。