AIX主机性能评估 [转帖]_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4322 | 回复: 0   主题: AIX主机性能评估 [转帖]        下一篇 
Gavin
注册用户
等级:少校
经验:878
发帖:130
精华:1
注册:2011-7-21
状态:离线
发送短消息息给Gavin 加好友    发送短消息息给Gavin 发消息
发表于: IP:您无权察看 2011-8-2 9:05:52 | [全部帖] [楼主帖] 楼主

转自:http://www.itpub.net/viewthread.php?tid=878666&extra=page%3D5%26amp%3Bfilter%3Ddigest


再发一篇吐血原创:AIX主机性能评估

这一篇可以作为我前面发的statspack解读的姊妹篇,再进一步说明如何来观察与数据库紧密联系的主机的性能。

对于AIX主机的性能评估,主要从下面的4个方面来逐一介绍:CPU、MEMORY、I/O系统和网络这4个方面来描述。

AIX 5.3主机性能评估 2

一、CPU性能评估 2

1、vmstat 2

2、sar 3

3、iostat 5

4、tprof 6

5、ps 8

6、解决CPU占用的惩罚机制nice和renice 9

7、小结 10

二、Memory性能评估 11

1、VMM的管理简介 11

2、使用vmstat确定内存的使用情况 14

3、svmon命令 14

4、内存的调整 15

三、磁盘的I/O性能评估 16

1、iostat查看 17

2、sar –d查看 20

3、使用lslv –l lvname来评估逻辑卷的碎片情况 21

4、lslv –p 评估物理布局 22

5、使用 vmstat 命令评估调页空间的 I/O 23

6、使用filemon命令监控系统I/O 24

7、监视磁盘 I/O 的小结 26

8、案例 26

9、RAID10和RAID5的比较 28

四、NETWORK性能评估 31

1、ping命令查看网络的连通性 31

2、netstat –i检查网络的接口 31

3、netstat –r检查主机的路由情况 32

4、netpmon 34

5、其他一些常用的命令 36

五、补充:关于topas的使用说明 36

六、主机日常检查脚本 39

脚本中包括的内容包括:主机的cpu,memory,io,network检查;ha检查,主机告警日志;数据库表空间,告警日志,job等的检查。

更新:七、结合oracle的一个案例

根据 tereal 的意见,对文档的部分描述不正确内容作了更正。

另外,加上了案例分析,新的附件在11页提供下载。

第一部分目录

一、CPU性能评估 1

1、vmstat 1

2、sar 3

3、iostat 5

4、tprof 5

5、ps 7

6、解决CPU占用的惩罚机制nice和renice 9

7、小结 9

1、vmstat

使用vmstat来进行性能评估,该命令可获得关于系统各种资��之间的相关性能的简要信息。当然我们也主要用它来看CPU的一个负载情况。

下面是我们调用vmstat命令的一个输出结果:

$vmstat 1 2
System configuration: lcpu=16 mem=23552MB
kthr memory page faults cpu
----- ----------- ------------------------ ----------------- -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 3091988 2741152 0 0 0 0 0 0 1849 26129 4907 8 1 88 3
0 0 3091989 2741151 0 0 0 0 0 0 2527 32013 6561 15 2 77 6


对上面的命令解释如下:

Kthr段显示内容

• r列表示可运行的内核线程平均数目,包括正在运行的线程和等待 CPU 的线程。如果这个数字大于 CPU 的数目,则表明有线程需要等待CPU。

• b列表示处在非中断睡眠状态的进程数。包括正在等待文件系统 I/O 的线程,或由于内存装入控制而被挂起的线程。

Memory段显示内容

• avm列表示活动虚拟内存的页面数,每页一般4KB

• fre空闲的页面数,每页一般4KB

Page段显示内容

• re –该列无效

• pi 从磁盘交换到内存的交换页(调页空间)数量,4KB/页。调页空间是驻留在硬盘上的虚拟内存的一部分。当内存使用过量时,会将溢出的工作组页面存储到调页空间中(窃取页)。当进程访问一个窃取页时,就产生了一个缺页故障,而这一页页必须从调页空间中读入到内存中。

• po 从内存交换到磁盘的交换页数量,4KB/页。如果窃取的工作也在调页空间中不存在或者已经作了修改,则写入调页空间中。如果不被再次访问,它会留在调度空间中直到进程终止或者放弃空间。

• fr 根据页面替换算法每秒释放的页数。当VMM页面替换例程扫描页面帧表(Page Frame Table,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(内核线程)列。

在上面的示例中,我们可以观察到以下几个主要的信息:

CPU IDLE比较高,比较空闲;r列为0,表明线程不存在等待;

WA值不高,说明I/O压力不大;

free值比较大,pi,po为0,表明内存非常富裕。空闲较多。

2、sar

第二个常用的是 sar命令,但是sar会增加系统的开销。当然有些情况下,我们使用sar比较方便。

sar的���出结果与前面的基本类似,这里不再作详细的介绍,关于命令的语法,也不再作详细的介绍,我们常用的命令格式:

#sar 1 3
AIX jsdxh_db02 3 5 00C2C1EB4C00 10/24/07
System configuration: lcpu=16
17:52:26 %usr %sys %wio %idle physc
17:52:27 19 7 0 75 8.00
17:52:28 19 6 0 75 8.01
17:52:29 19 7 0 75 8.02
Average 19 7 0 75 8.01


在这里,sar命令输出的是一个整体的cpu使用情况的一个统计,统计分项目的内容也比较直观,通过名字就可以理解涵义。这里有一点比较方便的就是,在最后一行有一个汇总的average行,作为上述统计的一个平均。另外,补充说明一点的就是,一般来说,第一行统计信息包含了sar命令本身启动的cpu消耗,所以往往是偏高的,所以导致average值也往往是偏高一点的。当然,这不会对结果产生多大影响。

当我们有多个cpu的时候,而程序采用的是单线程,有时候会出现一种情况,我们检查发现,cpu总体的使用率不高,但是程序响应却比较慢。这里有可能就是单线程只使用了一个cpu,导致这个cpu100%占用,处理不过来,而其他的cpu却闲置。这时可以对cpu分开查询,统计每个cpu的使用情况。

#sar -P ALL 1 2
AIX jsdxh_db02 3 5 00C2C1EB4C00 10/24/07
System configuration: lcpu=16
18:03:30 cpu %usr %sys %wio %idle physc
18:03:31 0 0 69 0 31 0.00
1 50 50 0 0 1.00
2 0 0 0 100 0.52
3 0 0 0 100 0.48
4 0 1 0 99 0.54
5 0 0 0 100 0.46
6 0 0 0 100 0.53
7 0 0 0 100 0.47
8 0 0 0 100 0.53
9 0 0 0 100 0.47
10 0 2 0 98 0.54
11 0 0 0 100 0.46
12 11 58 0 31 0.00
13 100 0 0 0 1.00
14 0 0 0 100 0.53
15 0 0 0 100 0.47
- 19 7 0 75 8.01
18:03:32 0 0 71 0 29 0.00
1 50 50 0 0 1.00
2 0 0 0 100 0.52
3 0 0 0 100 0.48
4 0 1 0 99 0.54
5 0 0 0 100 0.47
6 0 0 0 100 0.52
7 0 0 0 100 0.47
8 0 0 0 100 0.53
9 0 0 0 100 0.47
10 0 2 0 98 0.54
11 0 0 0 100 0.46
12 39 41 0 20 0.00
13 100 0 0 0 1.00
14 0 0 0 100 0.52
15 0 0 0 100 0.47
- 19 7 0 75 7.98
Average 0 0 70 0 30 0.00
1 50 50 0 0 1.00
2 0 0 0 100 0.52
3 0 0 0 100 0.48
4 0 1 0 99 0.54
5 0 0 0 100 0.46
6 0 0 0 100 0.53
7 0 0 0 100 0.47
8 0 0 0 100 0.53
9 0 0 0 100 0.47
10 0 2 0 98 0.54
11 0 0 0 100 0.46
12 28 48 0 24 0.00
13 100 0 0 0 1.00
14 0 0 0 100 0.52
15 0 0 0 100 0.47
- 19 7 0 75 8.00


上面是分cpu统计的情况,结果应该也比较直观吧。

Sar还有其他一些比较特殊的使用方法,比如:

如果希望多个采样和多个报告,可为 sar 命令指定一个输出文件,这样就方便多了。将 sar 命令的标准输出数据定向到 /dev/null,并将 sar 命令作为后台进程运行。具体的命令格式为:

sar -A -o /temp/sar_result.log 5 300 > /dev/null &


关于sar其他的一些使用方法,这里不再详述。

3、iostat

第三个可以用来使用的命令是iostat.

$ iostat -t 2 4
tty: tin tout avg-cpu: % user % sys % idle % iowait
0.0 0.0 0.0 0.1 99.8 0.1
0.0 81.0 0.0 0.1 99.9 0.0
0.0 40.5 0.0 0.0 100.0 0.0
0.0 40.5 0.0 0.1 99.1 0.8


TTY 的两列信息(tin 和 tou)显示了由所有 TTY 设备读写的字符数

CPU 统计信息列(% user、% sys、% idle 和 % iowait)提供了 CPU 的使用情况。

注意:第一份报告为系统启动以来的一个累积值。

4、tprof

使用tprof命令用于统计每个进程的CPU使用情况

# tprof -x sleep 30


该命令的输出结果可查看 __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
Process PID TID Total Kernel User Shared Other
======= === === ===== ====== ==== ====== =====
wait 40970 40971 2998 2998 0 0 0
wait 32776 32777 2994 2994 0 0 0
wait 24582 24583 2985 2985 0 0 0
wait 16388 16389 2980 2980 0 0 0
syncd 221254 155707 31 31 0 0 0
caiUxOs 524540 2294015 3 0 0 3 0
netm 73746 73747 1 1 0 0 0
hats_nim 1671242 1220665 1 0 0 1 0
snmpd64 598258 1245291 1 1 0 0 0
rpc.lockd 639212 1728679 1 1 0 0 0
tprof 704622 2277437 1 0 0 1 0
trclogio 360524 2408625 1 1 0 0 0
trace 1523820 2523145 1 0 0 1 0
clinfo 1958102 2760945 1 1 0 0 0
sh 1572938 2285709 1 1 0 0 0
======= === === ===== ====== ==== ====== =====
Total 12000 11994 0 6 0
Process FREQ Total Kernel User Shared Other
======= === ===== ====== ==== ====== =====
wait 4 11957 11957 0 0 0
syncd 1 31 31 0 0 0
caiUxOs 1 3 0 0 3 0
netm 1 1 1 0 0 0
hats_nim 1 1 0 0 1 0
snmpd64 1 1 1 0 0 0
rpc.lockd 1 1 1 0 0 0
tprof 1 1 0 0 1 0
trclogio 1 1 1 0 0 0
trace 1 1 0 0 1 0
clinfo 1 1 1 0 0 0
sh 1 1 1 0 0 0
======= === ===== ====== ==== ====== =====
Total 15 12000 11994 0 6 0


在这里,对wait进程作一点补充说明。

在AIX 5L下,你用ps aux会发现有一些root的wait进程

#ps aux |head -20
USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND
oracle 266354 5.7 0.0 50136 27524 - A 15:40:35 0:32 oracleora92 (LOC

root 17214 3.1 0.0 40 40 - A Jul 04 24793:53 wait

root 16946 3.1 0.0 40 40 - A Jul 04 24633:59 wait

root 16678 3.1 0.0 40 40 - A Jul 04 24600:21 wait

root 53274 3.1 0.0 40 40 - A Jul 04 24397:54 wait

root 286 3.1 0.0 40 40 - A Jul 04 24371:55 wait

root 8196 3.0 0.0 40 40 - A Jul 04 24312:40 wait

root 822 3.0 0.0 40 40 - A Jul 04 24303:36 wait

root 554 3.0 0.0 40 40 - A Jul 04 24261:50 wait

root 20776 2.7 0.0 40 40 - A Jul 04 21502:46 wait

root 57372 2.7 0.0 40 40 - A Jul 04 21439:31 wait

root 49176 2.7 0.0 40 40 - A Jul 04 21423:47 wait

root 21044 2.7 0.0 40 40 - A Jul 04 21398:24 wait

root 12848 2.7 0.0 40 40 - A Jul 04 21357:07 wait

root 21312 2.7 0.0 40 40 - A Jul 04 21324:26 wait

root 12580 2.7 0.0 40 40 - A Jul 04 21293:06 wait

root 13116 2.7 0.0 40 40 - A Jul 04 21195:47 wait

oracle 344612 0.3 0.0 57588 34976 - A Jul 04 2663:08 ora_j000_ora92

oracle 430408 0.3 0.0 55908 33296 - A Jul 04 2220:57 ora_j001_ora92

wait就是CPU空闲的时候运行的空闲进程,AIX4上叫kproc。所以这个进程占用越大,表示机器越空闲。Wait进程的数量是由机器上的逻辑CPU的个数决定的,有几个逻辑CPU,就有几个wait进程.

5、ps

这个命令使用本身也比较复杂,在这里只介绍如何查看cpu占用最高的进程。使用举例如下:

#ps aux | head -25

USER PID %CPU %MEM SZ RSS TTY STAT STIME TIME COMMAND

root 17214 3.1 0.0 40 40 - A Jul 04 25578:42 wait

root 16946 3.1 0.0 40 40 - A Jul 04 25415:54 wait

root 16678 3.1 0.0 40 40 - A Jul 04 25377:03 wait

root 53274 3.1 0.0 40 40 - A Jul 04 25170:12 wait

root 286 3.1 0.0 40 40 - A Jul 04 25144:00 wait

root 8196 3.0 0.0 40 40 - A Jul 04 25082:32 wait

root 822 3.0 0.0 40 40 - A Jul 04 25072:25 wait

root 554 3.0 0.0 40 40 - A Jul 04 25034:14 wait

root 20776 2.7 0.0 40 40 - A Jul 04 22181:27 wait

root 57372 2.7 0.0 40 40 - A Jul 04 22118:00 wait

root 49176 2.7 0.0 40 40 - A Jul 04 22102:02 wait

root 21044 2.7 0.0 40 40 - A Jul 04 22077:18 wait

root 12848 2.7 0.0 40 40 - A Jul 04 22036:44 wait

root 21312 2.7 0.0 40 40 - A Jul 04 21998:53 wait

root 12580 2.7 0.0 40 40 - A Jul 04 21967:17 wait

root 13116 2.7 0.0 40 40 - A Jul 04 21865:51 wait

oracle 344612 0.3 0.0 56372 33852 - A Jul 04 2707:30 ora_j000_ora92

oracle 430408 0.3 0.0 55916 33396 - A Jul 04 2266:20 ora_j001_ora92

oracle 365092 0.2 0.0 56184 33664 - A Jul 04 1765:58 ora_j002_ora92

oracle 442430 0.2 0.0 56092 33572 - A Jul 04 1426:40 ora_j003_ora92

oracle 385606 0.1 0.0 55984 33464 - A Jul 05 1159:17 ora_j004_ora92

oracle 413856 0.1 0.0 50520 28000 - A Jul 23 543:31 oracleora92 (LOC

oracle 143668 0.1 0.0 50528 28008 - A Jul 13 833:21 oracleora92 (LOC

oracle 369230 0.1 0.0 56600 34080 - A Jul 05 806:36 ora_j005_ora92

在这个输出结果中,排在前面的是16个root用户的wait进程,这其实是CPU空闲的时候运行的空闲进程,之前已作说明。

所以CPU最高的几个进程其实是下面的ORACLE用户的ora_j00*进程,这是ORACLE的job进程。在这里,这些进程的开销很小。如果ORACLE的进程开销比较大,我们可以用如下的方法来���询具体的进程在干什么事情,例如我们要查询进程ora_j000_ora92,PID=344612,可以使用下面的方法:

$su – oracle

SQL>sqlplus “/as sysdba”

SQL>oradebug setospid 344612

SQL>oradebug event 10046 trace name context forever, level 8

SQL>oradebug tracefile_name –这个命令我们获得输出文件的绝对路径和文件名

SQL>oradebug event 10046 trace name context off

$tkprof /opt/oracle/app/oracle/admin/ora92/bdump/ora92_j000_344612.trc tracepid.txt

$more tracepid.txt

在tracepid.txt中,我们就可以看到这个进程中具体运行的语句、过程等,以及所有的SQL的cpu消耗、物理读、逻辑读、执行计划等信息。

另外,我们也可以执行下面的语句查看进程具体运行的SQL语句的文本:

SELECT /*+ ORDERED */ sql_text FROM v$sqltext a

WHERE (a.hash_value, a.address) IN (
SELECT DECODE (sql_hash_value,0, prev_hash_value,sql_hash_value),
DECODE (sql_hash_value,0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = '&pid'))
ORDER BY piece ASC




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论