1)使用 sar -u 命令监控cpu使用
$ sar -u 5 5
12:21:15 %usr %sys %wio %idle
12:21:20 54 15 13 19
12:21:25 41 18 15 27
12:21:30 62 20 10 9
12:21:35 33 11 20 36
12:21:40 38 13 17 31
Average 45 15 15 24
%usr--运行在用户模式下cpu的使用百分比
%sys--运行在系统模式下cpu的使用百分比
%wio--进程在等待块I/O时闲置状态下cpu的使用百分比
%idle--闲置状态时cpu的使用百分比
很低的%idle说明cpu负载高,或者cpu处理能力不足,或者也可能是I/O问题。
很高的%wio,即系统I/O繁忙,进程获得cpu但在等I/O,这部分时间的比例,有可能是I/O存在问题。
2)使用top命令发现系统中最影响性能的用户
load averages: 2.83, 3.30, 3.67
143 processes: 124 sleeping, 15 running, 4 on cpu
CPU states: 45.9% idle, 24.8% user, 7.3% kernel, 22.0% iowait, 0.0% swap
Memory: 2048M real, 36M free, 2920M swap in use, 982M swap free
PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND
23696 oracle 11 52 0 586M 536M run 279:55 7.57% oracle
19184 oracle 11 53 0 586M 536M run 166:47 2.51% oracle
11303 oracle 11 53 0 742M 698M run 25.2H 1.43% oracle
8156 oracle 11 48 0 741M 695M run 28.7H 0.96% oracle
12786 oracle 11 59 0 588M 529M run 111.8H 0.94% oracle
15222 oracle 11 49 0 741M 695M cpu/8 30.9H 0.85% oracle
2924 oracle 11 59 0 748M 688M sleep 107.5H 0.83% oracle
8178 oracle 11 59 0 741M 695M cpu/0 28.8H 0.81% oracle
15220 oracle 11 54 0 741M 697M run 31.4H 0.78% oracle
8168 oracle 11 39 0 741M 697M run 30.0H 0.77% oracle
15216 oracle 11 59 0 741M 697M cpu/9 30.1H 0.77% oracle
8164 oracle 11 39 0 741M 695M run 30.8H 0.76% oracle
11267 oracle 11 59 0 741M 697M sleep 32.3H 0.74% oracle
15214 oracle 11 59 0 741M 695M sleep 30.9H 0.70% oracle
11861 oracle 1 59 0 739M 696M sleep 16.9H 0.67% oracle
3)使用uptime命令监控cpu负载
$ uptime
12:45pm up 119 day(s), 19:01, 1 user, load average: 2.96, 2.98, 3.30
提供快速查看cpu中所有任务(包括正在运行的任务)在1分钟,5分钟,15分钟内的负载。在sun下是1,5,15分钟,在digital unix下是5,30,60分钟。
4)使用mpstat命令确定cpu瓶颈
$ mpstat 10 3
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 91 14 127 406 245 97 49 62 45 0 351 25 9 9 57
1 106 16 145 174 101 312 70 111 33 0 327 27 6 10 56
4 99 16 83 173 101 294 68 108 33 0 290 26 6 10 58
5 102 17 126 184 110 313 70 115 33 0 336 26 6 10 57
8 97 17 127 174 101 302 69 113 33 0 299 25 6 11 58
9 93 11 335 329 274 239 61 103 59 0 217 23 10 7 60
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 19 33 3504 2160 1920 791 99 116 77 0 1401 30 17 12 42
1 82 39 1908 264 101 1210 157 215 49 0 2394 39 8 18 35
4 126 45 1839 276 102 1269 167 224 51 0 2511 34 9 14 43
5 133 49 2298 293 107 1384 178 239 53 0 2840 36 8 18 39
8 95 46 2772 266 101 1266 158 214 47 0 2638 38 7 14 40
9 115 38 2961 986 847 1173 158 213 88 0 2401 34 13 13 41
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 74 30 2438 1960 1743 670 65 100 66 0 1232 25 14 14 47
1 63 40 1615 229 101 1158 123 192 47 0 2277 35 6 14 44
4 145 28 1396 249 101 1148 142 190 42 0 2397 32 8 14 47
5 73 28 1588 253 107 1213 141 202 47 0 2578 32 8 9 51
8 44 29 3181 252 101 1210 146 187 39 0 2471 30 10 9 51
9 67 24 1345 823 727 1024 105 178 83 0 2006 26 9 9 55
mpstat命令是一个sun solaris工具,以报表形式报告每个处理器的统计数据。表的每一行代表一个处理器的活动情况。第一张表显示了自启动以来各种活动情况的总结。注意smtx项,它代表cpu尝试获取一个互斥锁定(mutex)失败的次数。mutex机制浪费cpu时间,并且降低多处理器的伸缩性能。如果stmx列的值大于200,说明将遇到cpu瓶颈问题。
5)使用sar命令监控磁盘I/O问题
$ sar -d 5 2
12:59:00 device %busy avque r+w/s blks/s avwait avserv
12:59:05 md30 71 0.8 103 1738 0.0 7.5
md31 34 0.4 52 934 0.0 7.1
md32 39 0.4 52 925 0.0 8.6
sd10 42 0.5 57 1001 0.0 9.0
sd10,a 0 0.0 0 0 0.0 0.0
sd10,b 0 0.0 0 0 0.0 0.0
sd10,c 0 0.0 0 0 0.0 0.0
12:59:10 md30 9 0.1 5 312 0.0 27.4
md31 4 0.1 4 277 0.0 16.1
md32 7 0.1 4 289 0.0 28.2
sd10 26 0.4 36 787 0.0 11.0
sd10,a 5 0.1 7 106 0.0 7.9
sd10,b 3 0.0 1 24 0.0 28.4
sd10,c 0 0.0 0 0 0.0 0.0
Average md30 40 0.5 54 1025 0.0 8.5
md31 19 0.2 28 606 0.0 7.7
md32 23 0.3 28 607 0.0 10.0
sd10 34 0.5 47 894 0.0 9.7
sd10,a 3 0.0 3 53 0.0 7.9
sd10,b 2 0.0 1 12 0.0 28.4
sd10,c 0 0.0 0 0 0.0 0.0
-d选项监控磁盘I/O
%busy
avque--平均队列长度
r+w/s--读和写的活动
blks/s--传送的数据块的数量
avwait--平均等待时间
avserv--平均服务时间
较高的%busy和avque意味着出现了磁盘I/O瓶颈。
$ sar -b 2 5
17:08:24 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s
17:08:26 0 530 100 2 2 0 0 0
17:08:28 0 536 100 3 3 0 0 0
17:08:31 0 339 100 0 1 67 0 0
17:08:33 0 332 100 1 3 67 0 0
17:08:35 0 343 100 3 57 95 0 0
Average 0 416 100 2 13 85 0 0
-b选项报告缓冲区活动,它等同于磁盘I/O活动。如果怀疑数据库I/O有问题,这个命令很有用。
bread/s--每秒钟从磁盘进行物理读入的数量
lread/s--每秒中从缓冲区读入的数量
%rcache--读入请求的缓冲区命中率
bwrit/s--每秒钟向磁盘物理写入的数量,它给dba提供了服务器上整体写入活动的指标
lwrit/s--每秒钟向缓冲区写入的数量
%wcache--写入请求的缓冲区命中率
pread/s--每秒钟从磁盘读入的数量,这个是I/O子系统上负载的极好度量
pwrit/s--每秒钟写入磁盘的数量
6)使用iostat确定磁盘I/O瓶颈
iostat可以用于报告终端和磁盘I/O活动情况,确定磁盘瓶颈。输出结果的第一行显示了自数据库启动以来各种I/O的统计数据。最常用的选项有-d,-x,-D,-c(cpu负载)。
$ iostat -d md30 md31 md32 sd10 5 5
md30 md31 md32 sd10
kps tps serv kps tps serv kps tps serv kps tps serv
9 1 13 7 0 15 7 0 14 46 6 14
112 14 11 56 7 12 56 7 10 439 46 14
24 3 8 13 2 6 11 1 10 51 6 8
3 0 12 2 0 14 2 0 9 89 10 7
3 0 25 2 0 40 2 0 10 34 19 29
-d选项可以列出每秒传送的字节数,每秒的传输次数以及平均服务时间(以毫秒计)。-d仅仅显示I/O,不区分读操作和写操作。
$ iostat -D md30 md31 md32 sd10 5 5
md30 md31 md32 sd10
rps wps util rps wps util rps wps util rps wps util
1 0 0.5 0 0 0.3 0 0 0.3 4 3 4.3
53 3 30.4 27 3 18.3 27 3 14.0 38 5 20.9
5 0 6.2 2 0 3.9 2 0 3.7 3 6 7.0
2 10 11.5 1 10 9.3 1 10 7.6 56 19 41.9
5 0 3.3 3 0 1.6 3 0 1.6 7 1 4.6
-D选项报告每秒的读操作数量,写操作数量以及磁盘使用率。
$ iostat -x 5 3
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
md30 0.5 0.1 4.0 4.5 0.0 0.0 12.8 0 0
md31 0.3 0.1 2.0 4.5 0.0 0.0 14.6 0 0
md32 0.3 0.1 2.0 4.5 0.0 0.0 14.1 0 0
sd10 3.6 2.6 37.0 8.6 0.0 0.1 14.1 0 4
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
md30 0.8 0.0 6.4 0.0 0.0 0.0 12.0 0 1
md31 0.4 0.0 3.2 0.0 0.0 0.0 13.0 0 1
md32 0.4 0.0 3.2 0.0 0.0 0.0 11.0 0 0
sd10 5.8 1.0 65.6 3.5 0.0 0.1 8.1 0 5
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
md30 0.4 0.0 3.2 0.0 0.0 0.0 11.8 0 0
md31 0.2 0.0 1.6 0.0 0.0 0.0 12.7 0 0
md32 0.2 0.0 1.6 0.0 0.0 0.0 10.9 0 0
sd10 0.2 1.2 1.6 3.8 0.0 0.0 16.9 0 2
-x选项报告所有磁盘的扩展磁盘统计数据
7)使用sar命令和vmstat命令监控分页/交换
一种可以快速判定自系统启动以来是否存在任何交换活动的方法就是运行vmstat -S命令,如果swp/in和swp/out列出现非零值,就说明很可能出现了问题。另外可以使用sar命令挖掘更多的信息。
可以使用sar命令来检查系统的分页/交换活动。任何分页和交换现象都预示着将出现问题。在虚拟内存系统中,如果当前非活动用户(的进程)从内存移到磁盘上时,就会出现分页现象(一个小问题)。而如果由于内存的不足造成当前活动用户(的进程)被移到了磁盘上,就会出现交换现象(问题很严重)。分页不像交换那么糟糕,但是随着分页的增加,很快就会出现交换。
$ sar -p 5 5
15:15:44 atch/s pgin/s ppgin/s pflt/s vflt/s slock/s
15:15:49 109.15 302.58 351.29 154.67 680.91 0.40
15:15:54 293.25 287.50 317.86 380.95 1447.82 0.00
15:15:59 146.41 418.92 485.86 71.51 327.09 0.00
15:16:04 96.03 386.90 429.56 92.86 362.70 0.00
15:16:09 197.81 495.63 526.64 340.76 983.70 0.00
Average 168.56 378.26 422.18 208.23 760.73 0.08
-p选项报告分页活动
atch/s--每秒的分页故障数据,可通过在内存中重新声明一个页来解决故障(每秒的附件)
pgin/s--每秒换进pagein请求数
ppgin/s--每秒换进的页数
pflt/s--每秒保护错误中的分页错误数(非法访问页)或者copy-on-write(写入时拷贝)数
vflt/s--每秒翻译页错误数(不在内存中的有效页)
slock/s--每秒因软件锁请求物理I/O引起的错误数
$ sar -w 5 5
15:25:00 swpin/s bswin/s swpot/s bswot/s pswch/s
15:25:05 0.00 0.0 0.00 0.0 6520
15:25:10 0.00 0.0 0.00 0.0 6190
15:25:15 0.00 0.0 0.00 0.0 5432
15:25:20 0.00 0.0 0.00 0.0 5239
15:25:25 0.00 0.0 0.00 0.0 5620
Average 0.00 0.0 0.00 0.0 5800
-w选项报告交换和内存切换活动
swpin/s--每秒进程换入的数量
bswin/s--每秒512个字节的换入数量
swpot/s--每秒进程换出的数量
bswot/s--每秒512个字节的换出数量
pswch/s--每秒进程上下文切换的数量
$ sar -r 5 5
15:26:50 freemem freeswap
15:26:55 4544 1998060
15:27:00 4032 1995139
15:27:05 4325 1991663
15:27:10 4372 1991611
15:27:15 4522 1987298
Average 4360 1992754
-r选项报告空闲内存和空闲交换
当freemem(空闲内存--以512字节为单位列出)低于一个特定的水平时,系统就开始分页。如果它继续下降,系统就开始将一些进程交换出去。这个一个系统性能快速恶化的信号,可以查找占用过多内存的进程,或者是否存在过多的进程。
$ sar -g 5 5
15:35:46 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
15:35:51 43.54 58.45 57.06 0.00 0.00
15:35:56 5.95 7.94 7.54 0.00 0.00
15:36:01 105.59 132.73 224.95 1230.94 0.00
15:36:06 38.22 46.53 81.39 412.67 0.00
15:36:11 11.33 13.12 12.72 0.00 0.00
Average 40.86 51.67 76.59 327.94 0.00
-g选项报告分页活动
pgout/s--每秒换出(pageout)请求数
ppgout/s--每秒换出(pageout)的页数
pgfree/s--由分页控制程序每秒放入空闲列表的页数
pgscan/s--由分页控制程序每秒扫描的分页数
%ufs_ipf--UFS incode与由iget获取的有重用页的空闲列表的比例。这些页已被填充,无法被进程重新声明使用。这样,它就是iget造成的页面填充比例。
很高的ppgout(从内存中移出的页面数)也说明内存不足的问题。
8)使用ipcs命令确定共享内存的使用情况
ipcs命令可以用来监控sga的使用情况。它报告sga中每个共享内存段的尺寸。如果在整个sga中没有足够的内存来容纳一个连续的内存段,sga就将建立非连续的内存段。在实例崩溃的情况下,可能就会出现内存无法释放的问题。如果发生了这样的情况,注意ipcrm命令可以清除这些段(ipcrm -m用于内存段,ipcrm -s用于信号段)。
$ ipcs -b
IPC status from as of Sat Jan 7 16:04:05 CST 2006
T ID KEY MODE OWNER GROUP QBYTES
Message Queues:
T ID KEY MODE OWNER GROUP SEGSZ
Shared Memory:
m 4608 0xdf00bc84 --rw-r----- oracle dba 708837376
m 4609 0xbd76b6f0 --rw-r----- oracle dba 541065216
T ID KEY MODE OWNER GROUP NSEMS
Semaphores:
s 65536 0xae97 --ra------- root root 129
s 1 0x100ae97 --ra------- root root 128
s 2 0x1 --ra-ra-ra- root root 1
s 3 0x73657276 --ra-ra-ra- root root 3
s 1245188 0xd8647e24 --ra-r----- oracle dba 504
s 1245189 0xbcdcaaa8 --ra-r----- oracle dba 304
这里,sga建立了2个非连续的段。通常最好是让整个sga处于一个单一的共享内存段,因为跟踪一个以上的段以及在这些段之间来回切换都需要额外的开销。可以在/etc/system文件中增加参数SHMMAX的设置,以增加一个单一的共享内存段的最大尺寸。