一、 问题描述
系统的操作用户反映某些操作功能比较慢,并且开发人员在向 数据库导入表数据时也非常慢,10万条数据导入花费近1小时,说明数据库确实有问题。
二、 问题分析
登录操作系统看了一下主机的负载以及数据库的性能状况,CPU总使用率较高,有90%,CPU实用情况如下:
$ topas
系统的操作用户反映某些操作功能比较慢,并且开发人员在向 数据库导入表数据时也非常慢,10万条数据导入花费近1小时,说明数据库确实有问题。
二、 问题分析
登录操作系统看了一下主机的负载以及数据库的性能状况,CPU总使用率较高,有90%,CPU实用情况如下:
$ topas
Topas Monitor for host: 55A_1 EVENTS/QUEUES FILE/TTY
Thu Aug 5 16:26:39 2010 Interval: 2 Cswitch 1664 Readch 75343
Syscall 133.9K Writech 264.3K9
Kernel 3.3 |## | Reads 821 Rawin 0
User 90.3 |########################## | Writes 744 Ttyout 386
Wait 0.0 |# | Forks 0 Igets 0
Idle 6.5 |## | Execs 0 Namei 75
Runqueue 12.5 Dirblk 0
Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue 0.0
en0 154.8 764.0 772.5 57.6 97.2
en1 0.1 0.5 0.5 0.1 0.1 PAGING MEMORY
lo0 0.1 1.0 1.0 0.0 0.0 Faults 216 Real,MB 32128
Steals 0 % Comp 29.2
Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn 0 % Noncomp 71.6
hdisk3 3.5 102.0 21.0 0.0 102.0 PgspOut 0 % Client 71.6
hdisk0 2.5 20.0 5.0 0.0 20.0 PageIn 1
hdisk1 2.0 22.0 5.5 2.0 20.0 PageOut 54 PAGING SPACE
hdisk2 1.0 210.0 18.5 4.0 206.0 Sios 56 Size,MB 15744
dac0 0.0 0.0 0.0 0.0 0.0 % Used 45.7
dac1 0.0 312.0 39.5 4.0 308.0 NFS (calls/sec) % Free 54.2
hdisk4 0.0 0.0 0.0 0.0 0.0 ServerV2 0
cd0 0.0 0.0 0.0 0.0 0.0 ClientV2 0 Press:
hdisk5 0.0 0.0 0.0 0.0 0.0 ServerV3 0 "h" for help
ClientV3 0 "q" to quit Name PID CPU% PgSp Owner
oracle 1994848 6.7 6.9 oracle
oracle 1302662 6.5 6.0 oracle
oracle 2171122 6.5 6.7 oracle
oracle 2363444 6.5 5.7 oracle
oracle 1773740 6.5 5.6 oracle
oracle 2150436 6.5 5.9 oracle
oracle 2805790 6.5 5.2 oracle
oracle 2228420 6.4 6.1 oracle
oracle 1953872 6.4 5.3 oracle
oracle 2142238 6.4 4.6 oracle
oracle 2470006 6.4 5.3 oracle
oracle 2138304 6.4 5.5 oracle
oracle 1662988 6.3 6.1 oracle
oracle 1999086 6.2 4.7 oracle
oracle 1925318 6.2 5.4 oracle
……..
通过vmstat命令监控内存,虚拟内存利用率同样比较高,FREE(自由表)比较小,物理内存的大部分被用作为文件系统数据的缓存实用。
通过进程查找发现系统后台有大量oracle进程:
ps -ef|grep oracle|grep LOCAL=NO
oracle 548922 1 0 Jul 21 - 0:25 oracleczcb (LOCAL=NO)
oracle 561180 1 0 Jul 21 - 0:17 oracleczcb (LOCAL=NO)
oracle 831668 1 0 Jul 21 - 0:27 oracleczcb (LOCAL=NO)
oracle 839800 1 0 Jul 21 - 0:00 oracleczcb (LOCAL=NO)
oracle 1110138 1 0 Jul 21 - 0:02 oracleczcb (LOCAL=NO)
oracle 1253464 1 0 Jul 21 - 0:39 oracleczcb (LOCAL=NO)
oracle 1364076 1 0 Jul 21 - 0:00 oracleczcb (LOCAL=NO)
oracle 1417398 1 0 Jul 21 - 0:16 oracleczcb (LOCAL=NO)
oracle 1429736 1 0 Jul 21 - 0:08 oracleczcb (LOCAL=NO)
oracle 1437710 1 0 Jul 21 - 0:07 oracleczcb (LOCAL=NO)
oracle 1441824 1 0 Jul 21 - 0:18 oracleczcb (LOCAL=NO)
oracle 1454248 1 0 Jul 21 - 0:00 oracleczcb (LOCAL=NO)
oracle 1519650 1 0 Jul 21 - 0:03 oracleczcb (LOCAL=NO)
oracle 1527910 1 0 Jul 21 - 0:10 oracleczcb (LOCAL=NO)
oracle 1536058 1 0 Jul 21 - 0:03 oracleczcb (LOCAL=NO)
oracle 1540294 1 0 Jul 21 - 0:17 oracleczcb (LOCAL=NO)
oracle 1548304 1 0 Jul 21 - 0:13 oracleczcb (LOCAL=NO)
…..
统计分析后发现有400多进程:
ps -ef|grep oracle|grep LOCAL=NO|grep -v grep|awk '{print $2}'|wc
406 3836 29155
数据库共运行有7个实例,经分析发现只有个别实例出现了大量请求未释放,请求连接从3月份到8月份,每个月逐渐累加,随着后台进程的慢慢积累,造成系统资源被大量占用,系统资源紧张,数据库系统逐渐变慢。
但是分析看很多进程为某天晚上积累,比如7月21号,0点后的操作累积了近50个挂起的连接,所以需要开发人员确认当天晚上是否做了系统变更引起,同样其他的挂起进程也需要检查。
通过如下语句查找对应月份的连接进程,kill该月份所有的挂起进程,系统资源被释放。
ps -ef|grep oracle|grep LOCAL=NO |grep Jul |grep -v grep |awk '{print $2}'|xargs kill -9
ps -ef|grep oracle|grep LOCAL=NO |grep Apr |grep -v grep |awk '{print $2}'|xargs kill -9
ps -ef|grep oracle|grep LOCAL=NO |grep Jun |grep -v grep |awk '{print $2}'|xargs kill -9
ps -ef|grep oracle|grep LOCAL=NO |grep Mar |grep -v grep |awk '{print $2}'|xargs kill -9
系统资源被释放:
Topas Monitor for host: 55A_1 EVENTS/QUEUES FILE/TTY
Thu Aug 5 20:49:11 2010 Interval: 2 Cswitch 377 Readch 167.4K4
Syscall 1158 Writech 253.2K0
Kernel 1.1 |# | Reads 57 Rawin 0
User 0.5 |# | Writes 25 Ttyout 345
Wait 0.4 |# | Forks 0 Igets 0
Idle 98.1 |############################| Execs 0 Namei 26
Runqueue 0.5 Dirblk 0
Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue 0.0
en0 1.9 5.5 5.0 0.8 1.1
en1 0.2 1.0 1.0 0.1 0.1 PAGING MEMORY
lo0 0.2 2.0 2.0 0.1 0.1 Faults 55 Real,MB 32128
Steals 0 % Comp 25.2
Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn 2 % Noncomp 75.6
hdisk1 4.9 35.8 8.9 11.9 23.9 PgspOut 0 % Client 75.6
dac0 0.0 0.0 0.0 0.0 0.0 PageIn 2
dac1 0.0 335.9 41.2 0.0 335.9 PageOut 65 PAGING SPACE
hdisk0 0.0 23.9 6.0 0.0 23.9 Sios 68 Size,MB 15744
hdisk2 0.0 246.5 23.4 0.0 246.5 % Used 34.9
cd0 0.0 0.0 0.0 0.0 0.0 NFS (calls/sec) % Free 65.0
hdisk3 0.0 89.4 17.9 0.0 89.4 ServerV2 0
hdisk4 0.0 0.0 0.0 0.0 0.0 ClientV2 0 Press:
hdisk5 0.0 0.0 0.0 0.0 0.0 ServerV3 0 "h" for help
ClientV3 0 "q" to quit
Name PID CPU% PgSp Owner
syncd 164026 0.7 0.5 root
oracle 2805786 0.2 5.2 oracle
oracle 2289824 0.1 5.9 oracle
topas 2748538 0.1 2.5 oracle
oracle 2834676 0.0 4.1 oracle
oracle 1282162 0.0 4.0 oracle
Thu Aug 5 16:26:39 2010 Interval: 2 Cswitch 1664 Readch 75343
Syscall 133.9K Writech 264.3K9
Kernel 3.3 |## | Reads 821 Rawin 0
User 90.3 |########################## | Writes 744 Ttyout 386
Wait 0.0 |# | Forks 0 Igets 0
Idle 6.5 |## | Execs 0 Namei 75
Runqueue 12.5 Dirblk 0
Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue 0.0
en0 154.8 764.0 772.5 57.6 97.2
en1 0.1 0.5 0.5 0.1 0.1 PAGING MEMORY
lo0 0.1 1.0 1.0 0.0 0.0 Faults 216 Real,MB 32128
Steals 0 % Comp 29.2
Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn 0 % Noncomp 71.6
hdisk3 3.5 102.0 21.0 0.0 102.0 PgspOut 0 % Client 71.6
hdisk0 2.5 20.0 5.0 0.0 20.0 PageIn 1
hdisk1 2.0 22.0 5.5 2.0 20.0 PageOut 54 PAGING SPACE
hdisk2 1.0 210.0 18.5 4.0 206.0 Sios 56 Size,MB 15744
dac0 0.0 0.0 0.0 0.0 0.0 % Used 45.7
dac1 0.0 312.0 39.5 4.0 308.0 NFS (calls/sec) % Free 54.2
hdisk4 0.0 0.0 0.0 0.0 0.0 ServerV2 0
cd0 0.0 0.0 0.0 0.0 0.0 ClientV2 0 Press:
hdisk5 0.0 0.0 0.0 0.0 0.0 ServerV3 0 "h" for help
ClientV3 0 "q" to quit Name PID CPU% PgSp Owner
oracle 1994848 6.7 6.9 oracle
oracle 1302662 6.5 6.0 oracle
oracle 2171122 6.5 6.7 oracle
oracle 2363444 6.5 5.7 oracle
oracle 1773740 6.5 5.6 oracle
oracle 2150436 6.5 5.9 oracle
oracle 2805790 6.5 5.2 oracle
oracle 2228420 6.4 6.1 oracle
oracle 1953872 6.4 5.3 oracle
oracle 2142238 6.4 4.6 oracle
oracle 2470006 6.4 5.3 oracle
oracle 2138304 6.4 5.5 oracle
oracle 1662988 6.3 6.1 oracle
oracle 1999086 6.2 4.7 oracle
oracle 1925318 6.2 5.4 oracle
……..
通过vmstat命令监控内存,虚拟内存利用率同样比较高,FREE(自由表)比较小,物理内存的大部分被用作为文件系统数据的缓存实用。
通过进程查找发现系统后台有大量oracle进程:
ps -ef|grep oracle|grep LOCAL=NO
oracle 548922 1 0 Jul 21 - 0:25 oracleczcb (LOCAL=NO)
oracle 561180 1 0 Jul 21 - 0:17 oracleczcb (LOCAL=NO)
oracle 831668 1 0 Jul 21 - 0:27 oracleczcb (LOCAL=NO)
oracle 839800 1 0 Jul 21 - 0:00 oracleczcb (LOCAL=NO)
oracle 1110138 1 0 Jul 21 - 0:02 oracleczcb (LOCAL=NO)
oracle 1253464 1 0 Jul 21 - 0:39 oracleczcb (LOCAL=NO)
oracle 1364076 1 0 Jul 21 - 0:00 oracleczcb (LOCAL=NO)
oracle 1417398 1 0 Jul 21 - 0:16 oracleczcb (LOCAL=NO)
oracle 1429736 1 0 Jul 21 - 0:08 oracleczcb (LOCAL=NO)
oracle 1437710 1 0 Jul 21 - 0:07 oracleczcb (LOCAL=NO)
oracle 1441824 1 0 Jul 21 - 0:18 oracleczcb (LOCAL=NO)
oracle 1454248 1 0 Jul 21 - 0:00 oracleczcb (LOCAL=NO)
oracle 1519650 1 0 Jul 21 - 0:03 oracleczcb (LOCAL=NO)
oracle 1527910 1 0 Jul 21 - 0:10 oracleczcb (LOCAL=NO)
oracle 1536058 1 0 Jul 21 - 0:03 oracleczcb (LOCAL=NO)
oracle 1540294 1 0 Jul 21 - 0:17 oracleczcb (LOCAL=NO)
oracle 1548304 1 0 Jul 21 - 0:13 oracleczcb (LOCAL=NO)
…..
统计分析后发现有400多进程:
ps -ef|grep oracle|grep LOCAL=NO|grep -v grep|awk '{print $2}'|wc
406 3836 29155
数据库共运行有7个实例,经分析发现只有个别实例出现了大量请求未释放,请求连接从3月份到8月份,每个月逐渐累加,随着后台进程的慢慢积累,造成系统资源被大量占用,系统资源紧张,数据库系统逐渐变慢。
但是分析看很多进程为某天晚上积累,比如7月21号,0点后的操作累积了近50个挂起的连接,所以需要开发人员确认当天晚上是否做了系统变更引起,同样其他的挂起进程也需要检查。
通过如下语句查找对应月份的连接进程,kill该月份所有的挂起进程,系统资源被释放。
ps -ef|grep oracle|grep LOCAL=NO |grep Jul |grep -v grep |awk '{print $2}'|xargs kill -9
ps -ef|grep oracle|grep LOCAL=NO |grep Apr |grep -v grep |awk '{print $2}'|xargs kill -9
ps -ef|grep oracle|grep LOCAL=NO |grep Jun |grep -v grep |awk '{print $2}'|xargs kill -9
ps -ef|grep oracle|grep LOCAL=NO |grep Mar |grep -v grep |awk '{print $2}'|xargs kill -9
系统资源被释放:
Topas Monitor for host: 55A_1 EVENTS/QUEUES FILE/TTY
Thu Aug 5 20:49:11 2010 Interval: 2 Cswitch 377 Readch 167.4K4
Syscall 1158 Writech 253.2K0
Kernel 1.1 |# | Reads 57 Rawin 0
User 0.5 |# | Writes 25 Ttyout 345
Wait 0.4 |# | Forks 0 Igets 0
Idle 98.1 |############################| Execs 0 Namei 26
Runqueue 0.5 Dirblk 0
Network KBPS I-Pack O-Pack KB-In KB-Out Waitqueue 0.0
en0 1.9 5.5 5.0 0.8 1.1
en1 0.2 1.0 1.0 0.1 0.1 PAGING MEMORY
lo0 0.2 2.0 2.0 0.1 0.1 Faults 55 Real,MB 32128
Steals 0 % Comp 25.2
Disk Busy% KBPS TPS KB-Read KB-Writ PgspIn 2 % Noncomp 75.6
hdisk1 4.9 35.8 8.9 11.9 23.9 PgspOut 0 % Client 75.6
dac0 0.0 0.0 0.0 0.0 0.0 PageIn 2
dac1 0.0 335.9 41.2 0.0 335.9 PageOut 65 PAGING SPACE
hdisk0 0.0 23.9 6.0 0.0 23.9 Sios 68 Size,MB 15744
hdisk2 0.0 246.5 23.4 0.0 246.5 % Used 34.9
cd0 0.0 0.0 0.0 0.0 0.0 NFS (calls/sec) % Free 65.0
hdisk3 0.0 89.4 17.9 0.0 89.4 ServerV2 0
hdisk4 0.0 0.0 0.0 0.0 0.0 ClientV2 0 Press:
hdisk5 0.0 0.0 0.0 0.0 0.0 ServerV3 0 "h" for help
ClientV3 0 "q" to quit
Name PID CPU% PgSp Owner
syncd 164026 0.7 0.5 root
oracle 2805786 0.2 5.2 oracle
oracle 2289824 0.1 5.9 oracle
topas 2748538 0.1 2.5 oracle
oracle 2834676 0.0 4.1 oracle
oracle 1282162 0.0 4.0 oracle
编写shell脚本
#vi kill_no_local_connect.sh
#!/bin/sh
ps -e -o pid -o etime -o args|grep oracle|grep LOCAL=NO|grep ->/tmp/tmpfile
# ps -e -o pid -o etime -o args|grep oracle|grep LOCAL=NO|grep -|awk '{print $2}'|awk -F- '{print $1}'
cat /tmp/tmpfile|while read LINE
do
TIME=`echo $LINE|awk '{print $2}'`
TIME=`echo $TIME|awk -F- '{print $1}'`
if [ $TIME -gt 3 ]
then
echo $LINE|awk '{print $1}'|xargs -t -n1 kill -9
fi
done
rm -f /tmp/tmpfile
ps -e -o pid -o etime -o args|grep oracle|grep LOCAL=NO|grep ->/tmp/tmpfile
# ps -e -o pid -o etime -o args|grep oracle|grep LOCAL=NO|grep -|awk '{print $2}'|awk -F- '{print $1}'
cat /tmp/tmpfile|while read LINE
do
TIME=`echo $LINE|awk '{print $2}'`
TIME=`echo $TIME|awk -F- '{print $1}'`
if [ $TIME -gt 3 ]
then
echo $LINE|awk '{print $1}'|xargs -t -n1 kill -9
fi
done
rm -f /tmp/tmpfile
加入定时任务
0 23 * * * /opt/kill_no_local_connect.sh
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25369863/viewspace-688247/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25369863/viewspace-688247/