做性能调优首先需要了解系统的现象,一个应用如果出现性能问题,大部分应用都会在操作系统层面表现出问题,比如CPU使用过度, 程序中锁使用过于频繁, 内存泄露等等, 这些都可用Solaris的基本命令看出来, 基本上在性能调优过程, 我们需要通过Solaris 10的一些常用命令比如mpstat, vmstat, iostat等等确定问题所在, 然后再用dtrace进行深入调查。
比方说, 如果是CPU方面使用有问题, 我们通过mpstat, prstat来看。 下面是一个例子, 只是一个范例而已:
# mpstat 2
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 117 0 1583 883 111 1487 593 150 6104 64 11108 7 92 0 1
1 106 0 557 842 0 1804 694 150 6553 84 10684 6 93 0 1
2 112 0 664 901 0 1998 795 143 6622 64 11227 6 93 0 1
3 95 0 770 1035 0 2232 978 131 6549 59 11769 7 92 0 1
可以看到cpu使用在系统态层面大概平均93%, 用户层大概6%左右, 1%左右是闲置的,而sys call调用是大量而且频繁的, 良好的系统应用应该是大部分的时间花在用户层面, 而少部分时间使用在系统调用层面。
我们使用dtrace往下追踪是什么应用导致这么多的sys call:
# dtrace -n 'syscall:::entry { @[execname] = count(); }'
dtrace: description 'syscall:::entry ' matched 229 probes
^C
inetd 1
svc.configd 1
fmd 2
snmpdx 2
utmpd 2
inetd 1
svc.configd 1
fmd 2
snmpdx 2
utmpd 2
svc.startd 13
sendmail 30
snmpd 36
nscd 105
dtrace 1311
filebench 3739725