分类:
2008-10-27 14:28:31
在这个案例中,主要重点就io这一块作分析。对于其他的,在这里就不作讨论。
应用环境:
两台P570作HA(Rotating方式),AIX 5.3 安装oracle 9206,磁阵DS4300,14块盘,6块作raid10为hdisk4,另外8块盘作raid10为hdisk5
两台P630作HA(Rotating方式),AIX 5.1 安装oracle 9206,磁阵7133
两个数据库各分担一定的功能。P570压力比较大。
性能问题:
最近,P570数据库上的数据库性能急剧下降,报表统计跑将近24个小时才能完成,严重影响白天正常的业务,给主机带来比较大的性能负担。
检查过程(主要在P570上操作):
1、使用topas查看一下操作系统的load情况。结果没想到topas无法运行了,得到的结果如下,根本无法刷新数据。
Topas Monitor for host: jsdxh_db01 EVENTS/QUEUES FILE/TTY
Thu Oct 25 13:58:32 2007 Interval: 2 Cswitch Readch
Syscall Writech
Kernel | | Reads Rawin
User | | Writes Ttyout
Wait | | Forks Igets
Idle | | Execs Namei
Runqueue Dirblk
Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue
PAGING MEMORY
Faults Real,MB
Steals % Comp
Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn % Noncomp
PgspOut % Client
PageIn
PageOut PAGING SPACE
Sios Size,MB
% Used
NFS (calls/sec) % Free
ServerV2
ClientV2 Press:
ServerV3 "h" for help
ClientV3 "q" to quit
2、安装nmon_aix53(操作系统为5.3),结果nmon_aix53运行也报错。
#./nmon_aix53
ERROR: Assert Failure in file="nmon11.c" in function="main" at line=3239
ERROR: Reason=NULL pointer
ERROR: Expression=[[q->procs = MALLOC(sizeof(struct procentry64 ) * n )]]
ERROR: errno=12
ERROR: errno means : Not enough space
3、检查进程情况
#ps -ef | wc -l
9947
竟然总共已经产生了9000多个进程。在这众多的进程中可以发现有很多的defunct进程。
#ps -ef |grep defunct | wc -l
9331
##ps -ef | grep defunct | more
root 159952 1 0 0:00
root 172052 1 0 0:00
root 225294 1 1 0:00
root 262236 1 0 0:00
root 290902 1 0 0:00
在网上随便查一下defunct,就可以知道,这是孤儿进程。已经找不到父进程,所以把init(PID 1)作为他的父进程。上面的结果中就是PPID=1。孤儿进程无法用kill -9 来清除,即使是root用户也不行,只能重启。这些孤儿进程一般情况下都是由于不当的fork ()/execve()造成的。
继续检查系统,不知道这么多的孤儿进程是哪个产生的。看一下主机系统的报错情况。
#errpt |more
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION
A63BEB70 1025140007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED
A63BEB70 1025133007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED
A63BEB70 1025130007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED
A63BEB70 1025123007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED
A63BEB70 1025120007 P S SYSPROC SOFTWARE PROGRAM ABNORMALLY TERMINATED
在这里,可以看到频繁的这个报错。基本每隔半个小时报错一次。再检查详细的错误。可以定位到原来是由于一个网管监控软件造成的这个错误。基本也可以判断,由于整个软件的不当的fork调用,导致了数量惊人的孤儿进程。
现在孤儿进程的问题基本确定了,但是这个孤儿进程到目前为止,对系统造成的影响有多大?网上搜了一把,孤儿进程一般不占用内存,不占用空间,只不过是在进程列表中占了一个位置,所以并不会对系统性能产生太严重的影响。当然,如果任期发展,有可能就会使主机hang住。在这里,网管系统是以root用户运行的,进程数的限制非常大。所以,这里孤儿进程应该只是一个隐患,并不是对当前性能造成影响的原因。
4、检查cpu的使用情况,
#vmstat 1 10
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
4 0 3533226 2251446 0 0 0 0 0 0 3167 323907 7321 22 9 32 37
1 0 3533229 2251443 0 0 0 0 0 0 1863 313913 4784 18 8 40 34
2 0 3533229 2251443 0 0 0 0 0 0 3004 319720 6939 19 9 35 38
Cpu的使用率基本在65%左右,wa基本在35%到40%,io等待比较严重。
[1]