如果需要更深入的了解瓶颈所在,可使用dtrace工具。OpenSolaris DTrace Community提供了一些专注于此方面的dtrace脚本,可在执行性能调优时使用。
第一节:处理器监控
1、solaris
查看处理器状态,psrinfo显示处理器每个核(core)的状态信息
-bash-3.00$ /usr/sbin/psrinfo
0 on-line since 10/13/2007 02:30:32
1 on-line since 10/13/2007 02:30:33
2 on-line since 10/13/2007 02:30:33
....
查看处理器的详细信息
-bash-3.00$ /usr/sbin/psrinfo -v
Status of virtual processor 0 as of: 12/27/2007 09:39:37
on-line since 10/13/2007 02:30:32.
The sparcv9 processor operates at 1000 MHz,
and has a sparcv9 floating point processor.
Status of virtual processor 1 as of: 12/27/2007 09:39:37
on-line since 10/13/2007 02:30:33.
The sparcv9 processor operates at 1000 MHz,
and has a sparcv9 floating point processor.
....
来个中文的:
bash-3.00$ /usr/sbin/psrinfo -v
虚拟处理器 0 在下列时间的状态:12/27/2007 13:14:53
自 12/27/2007 12:59:29 开始已在运行。
i386 处理器以 1333 MHz 运行,
而且有 i387 compatible 浮点数处理器
查看每个处理器(同样以核为单位)的统计信息,用mpstat命令
bash-3.00$ mpstat 2 5
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 1058 21 0 309 224 1029 65 0 5 0 2825 16 35 0 49
0 8 0 0 345 245 217 2 0 1 0 62 0 2 0 98
0 10 0 0 343 244 209 1 0 1 0 64 0 2 0 98
0 0 0 0 478 378 498 68 0 67 0 54 0 11 0 89
0 0 0 0 346 245 208 1 0 1 0 60 0 1 0 99
输出中,一般看最后四个字段:usr,sys,wt,idl。idl不低于30基本没事,sys如果常高于15需引起注意,wt是历史遗留字段对于solaris10而言总是0。其他几个常见字段:
xcal 多个处理器间交叉调用的次数
csw 处理器执行上下文交换的次数
syscl 本处理器执行系统调用的次数
注意:mpstat之类的按时间与次数的采样工具的输出第一行是自系统启动以来的汇总平均值统计
此外,kstat命令也可以用来收集处理器的信息:
bash-3.00$ kstat -m cpu
module: cpu instance: 0
name: intrstat class: misc
crtime 29.699815013
level-1-count 65517
level-1-time 991179530
level-10-count 163269
level-10-time 97182752330
level-11-count 0
level-11-time 0
level-12-count 2
level-12-time 238486
......