对于AIX主机的性能评估Word文件下载.docx
《对于AIX主机的性能评估Word文件下载.docx》由会员分享,可在线阅读,更多相关《对于AIX主机的性能评估Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
当进程访问一个窃取页时,就产生了一个缺页故障,而这一页页必须从调页空间中读入到内存中。
♦po从内存交换到磁盘的交换页数量,4KB/页。
如果窃取的工作也在调页空间中不存在或者已经作了修改,则写入调页空间中。
如果不被再次访问,它会留在调度空间中直到进程终止或者放弃空间。
♦fr根据页面替换算法每秒释放的页数。
当VMM页面替换例程扫描页面帧表(PageFrameTable,PFT)时,它会根据一些条件选取需要窃取的页面以补充空闲列表。
该条件中包含工作页面和计算页面,释放的页面中,计算页面不产生I/O,工作页面如果数据没有发生修改,也不需要写回磁盘,也不会产生I/O。
♦sr根据页面替换算法每秒所检查的页数。
sr值比fr值高的越多,说明替换算法要查找可以替换的页面就越困难。
♦cy每秒页面替换代码扫描了PFT多少次。
因为增加空闲列表达到maxfree值,不一定需要完全扫描PFT表,而所有vmstat输出都为整数,所以通常cy列值为0。
Faults段显示内容(其实这段内容不需太多关注)
♦in在该时间间隔中观测到的每秒设备中断数。
♦sy在该时间间隔中观测到的每秒系统调用次数。
♦cs在该时间间隔中观测到的每秒钟上下文切换次数。
Cpu段显示内容
♦us列显示了用户模式所消耗的CPU时间。
♦sy列详细显示了CPU在系统模式所消耗的CPU时间。
♦id列显示了没有未决本地磁盘I/O时CPU空闲或等待时间的百分比。
♦wa列详细显示了有未决本地磁盘I/O时CPU空闲的时间百分比。
wa的值如果超过25%,就表明磁盘子系统可能没有被正确平衡,或者这也可能是磁盘工作负荷很重的结果。
如果在一个单用户系统中,us+sy时间不超过90%,我们就不认为系统的CPU是受限制的。
如果在一个多用户系统中,us+sy时间超过80%,我们就认为系统的CPU是受限的。
其中的进程将要花时间在运行队列中等待。
响应时间和吞吐量会受损害。
检查cpu,我们主要关注报告中的4个cpu列和2个kthr(内核线程)列。
在上面的示例中,我们可以观察到以下几个主要的信息:
CPUIDLE比较高,比较空闲;
r列为0,表明线程不存在等待;
WA值不高,说明I/O压力不大;
free值比较大,pi,po为0,表明内存非常富裕。
空闲较多。
2、sar
第二个常用的是sar命令,但是sar会增加系统的开销。
当然有些情况下,我们使用sar比较方便。
sar的输出结果与前面的基本类似,这里不再作详细的介绍,关于命令的语法,也不再作详细的介绍,我们常用的命令格式:
#sar13
AIXjsdxh_db023500C2C1EB4C0010/24/07
lcpu=16
17:
52:
26%usr%sys%wio%idlephysc
271970758.00
281960758.01
291970758.02
Average1970758.01
在这里,sar命令输出的是一个整体的cpu使用情况的一个统计,统计分项目的内容也比较直观,通过名字就可以理解涵义。
这里有一点比较方便的就是,在最后一行有一个汇总的average行,作为上述统计的一个平均。
另外,补充说明一点的就是,一般来说,第一行统计信息包含了sar命令本身启动的cpu消耗,所以往往是偏高的,所以导致average值也往往是偏高一点的。
当然,这不会对结果产生多大影响。
当我们有多个cpu的时候,而程序采用的是单线程,有时候会出现一种情况,我们检查发现,cpu总体的使用率不高,但是程序响应却比较慢。
这里有可能就是单线程只使用了一个cpu,导致这个cpu100%占用,处理不过来,而其他的cpu却闲置。
这时可以对cpu分开查询,统计每个cpu的使用情况。
#sar-PALL12
18:
03:
30cpu%usr%sys%wio%idlephysc
3100690310.00
15050001.00
20001000.52
30001000.48
4010990.54
50001000.46
60001000.53
70001000.47
80001000.53
90001000.47
10020980.54
110001000.46
1211580310.00
131000001.00
140001000.53
150001000.47
-1970758.01
3200710290.00
50001000.47
60001000.52
1239410200.00
140001000.52
-1970757.98
Average00700300.00
1228480240.00
-1970758.00
上面是分cpu统计的情况,结果应该也比较直观吧。
Sar还有其他一些比较特殊的使用方法,比如:
如果希望多个采样和多个报告,可为sar命令指定一个输出文件,这样就方便多了。
将sar命令的标准输出数据定向到/dev/null,并将sar命令作为后台进程运行。
具体的命令格式为:
sar-A-o/temp/sar_result.log5300>
/dev/null&
关于sar其他的一些使用方法,这里不再详述。
3、iostat
第三个可以用来使用的命令是iostat.
$iostat-t24
tty:
tintoutavg-cpu:
%user%sys%idle%iowait
0.00.00.00.199.80.1
0.081.00.00.199.90.0
0.040.50.00.0100.00.0
0.040.50.00.199.10.8
TTY的两列信息(tin和tou)显示了由所有TTY设备读写的字符数
CPU统计信息列(%user、%sys、%idle和%iowait)提供了CPU的使用情况。
注意:
第一份报告为系统启动以来的一个累积值。
4、tprof
使用tprof命令用于统计每个进程的CPU使用情况
#tprof-xsleep30
该命令的输出结果可查看__prof.all文件。
此命令运行30秒钟,在当前目录下创建一个名为_prof.all的文件。
30秒钟内,CPU被调度次数约为3000次。
__prof.all文件中的字段Total为此进程调度到的CPU次数。
如果进程所对应的Total字段的值为1500,即表示该进程在3000次CPU调度中占用了1500次,或理解为使用了一半的CPU时间。
tprof的输出准确地显示出哪个进程在使用CPU时间。
在我下面的这一份示例中,可以看到,大部分的cpu时间都是被wait所占用的。
这里的wait实际上是idle进程,可以表明这个系统是一个完全空闲的系统。
$more__prof.all
ProcessPIDTIDTotalKernelUserSharedOther
=======================================
wait409704097129982998000
wait327763277729942994000
wait245822458329852985000
wait163881638929802980000
syncd2212541557073131000
caiUxOs524540229401530030
netm737467374711000
hats_nim1671242122066510010
snmpd64598258124529111000
rpc.lockd639212172867911000
tprof704622227743710010
trclogio360524240862511000
trace1523820252314510010
clinfo1958102276094511000
sh1572938228570911000
Total1200011994060
ProcessFREQTotalKernelUserSharedOther
====================================
wait41195711957000
syncd13131000
caiUxOs130030
netm111000
hats_nim110010
snmpd64111000
rpc.lockd111000
tprof110010
trclogio111000
trace110010
clinfo111000
sh111000
Total151200011994060
在这里,对wait进程作一点补充说明。
在AIX5L下,你用psaux会发现有一些root的wait进程
#psaux|head-20
USERPID%CPU%MEMSZRSSTTYSTATSTIMETIMECOMMAND
oracle2663545.70.05013627524-A15:
40:
350:
32oracleora92(LOC
root172143.10.04040-AJul0424793:
53wait
root169463.10.04040-AJul0424633:
59wait
root166783.10.04040-AJul0424600:
21wait
root532743.10.04040-AJul0424397:
54wait
root2863.10.04040-AJul0424371:
55wait
root81963.00.04040-AJul0424312:
40wait
root8223.00.04040-AJul0424303:
36wait
root5543.00.04040-AJul0424261:
50wait
root207762.70.04040-AJul0421502:
46wait
root573722.70.04040-AJul0421439:
31wait
root491762.70.04040-AJul0421423:
47wait
root210442.70.04040-AJul0421398:
24wait
root128482.70.04040-AJul0421357:
07wait
root213122.70.04040-AJul0421324:
26wait
root125802.70.04040-AJul0421293:
06wait
root131162.70.04040-AJul0421195:
oracle3446120.30.05758834976-AJul042663:
08ora_j000_ora92
oracle4304080.30.05590833296-AJul042220:
57ora_j001_ora92
wait就是CPU空闲的时候运行的空闲进程,AIX4上叫kproc。
所以这个进程占用越大,表示机器越空闲。
Wait进程的数量是由机器上的逻辑CPU的个数决定的,有几个逻辑CPU,就有几个wait进程.
5、ps
这个命令使用本身也比较复杂,在这里只介绍如何查看cpu占用最高的进程。
使用举例如下:
#psaux|head-25
root172143.10.04040-AJul0425578:
42wait
root169463.10.04040-AJul0425415:
root166783.10.04040-AJul0425377:
03wait
root532743.10.04040-AJul0425170:
12wait
root2863.10.04040-AJul0425144:
00wait
root81963.00.04040-AJul0425082:
32wait
root8223.00.04040-AJul0425072:
25wait
root5543.00.04040-AJul0425034:
14wait
root207762.70.04040-AJul0422181:
27wait
root573722.70.04040-AJul0422118:
root491762.70.04040-AJul0422102:
02wait
root210442.70.04040-AJul0422077:
18wait
root128482.70.04040-AJul0422036:
44wait
root213122.70.04040-AJul0421998:
root125802.70.04040-AJul0421967:
17wait
root131162.70.04040-AJul0421865:
51wait
oracle3446120.30.05637233852-AJul042707:
30ora_j000_ora92
oracle4304080.30.05591633396-AJul042266:
20ora_j001_ora92
oracle3650920.20.05618433664-AJul041765:
58ora_j002_ora92
oracle4424300.20.05609233572-AJul041426:
40ora_j003_ora92
oracle3856060.10.05598433464-AJul051159:
17ora_j004_ora92
oracle4138560.10.05052028000-AJul23543:
31oracleora92(LOC
oracle1436680.10.05052828008-AJul13833:
21oracleora92(LOC
oracle3692300.10.05660034080-AJul05806:
36ora_j005_ora92
在这个输出结果中,排在前面的是16个root用户的wait进程,这其实是CPU空闲的时候运行的空闲进程,之前已作说明。
所以CPU最高的几个进程其实是下面的ORACLE用户的ora_j00*进程,这是ORACLE的job进程。
在这里,这些进程的开销很小。
如果ORACLE的进程开销比较大,我们可以用如下的方法来查询具体的进程在干什么事情,例如我们要查询进程ora_j000_ora92,PID=344612,可以使用下面的方法:
$su–oracle
SQL>
sqlplus“/assysdba”
oradebugsetospid344612
oradebugevent10046tracenamecontextforever,level8
oradebugtracefile_name–这个命令我们获得输出文件的绝对路径和文件名
oradebugevent10046tracenamecontextoff
$tkprof/opt/oracle/app/oracle/admin/ora92/bdump/ora92_j000_344612.trctracepid.txt
$moretracepid.txt
在tracepid.txt中,我们就可以看到这个进程中具体运行的语句、过程等,以及所有的SQL的cpu消耗、物理读、逻辑读、执行计划等信息。
另外,我们也可以执行下面的语句查看进程具体运行的SQL语句的文本:
SELECT/*+ORDERED*/sql_textFROMv$sqltexta
WHERE(a.hash_value,a.address)IN(
SELECTDECODE(sql_hash_value,0,prev_hash_value,sql_hash_value),
DECODE(sql_hash_value,0,prev_sql_addr,sql_address)
FROMv$sessionb
WHEREb.paddr=(SELECTaddr
FROMv$processc
WHEREc.spid='
&
pid'
))
ORDERBYpieceASC
6、解决CPU占用的惩罚机制nice和renice
指定和修改命令的优先级。
系统中运行的每个进程都有一个优先级,我们可以用ps命令看到,这个优先级为PRI,PRI的值越小,优先级越高,能占用更多的CPU时间片。
系统默认的PRI为60,我们可以通过nice命令和renice命令来改变一个进程的优先级,从而控制进程对CPU时间片的占用。
任何一个用户都可以使用nice命令来使他的进程以低于系统默认的pri运行。
但是只有root用户才可以使进程以高于默认的pri运行。
我们先来看一下nice命令的使用方法:
#nice–n-5vmstat210>
vmstat.out
#ps-el
FSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD
200001A0704738152372805515aee1400544f100009e63c23e30pts/10:
00vmstat
指定程序以nice值-5开始运行。
程序开始后,nice的值为15,PRI的值为55。
nice命令可以指定的范围为-20(最高优先级)到20(最低优先级)。
在AIX5.3中,默认的nice为20。
#vmstat210>
vms