- 这段时间学习shell编程,特编写一个了监控数据库服务器性能的脚本,这个脚本可以监控进程,内存,swap,PGA连接数,网络,还有load
- #!/bin/sh
- #creater:danchen
- #date:2007-3-27
- #local varrible
- mailto='username@163.com'
- dbname=`hostname|sed 's/_.*//g'`
- echo ""
- echo $dbname
- echo "************************"
- #process
- echo ""
- echo "total processes"
- echo "************************"
- ps -ef|wc -l
- echo ""
- echo "PGA processes"
- echo "************************"
- v_lp=`ps -ef|grep LOCAL|grep -v "grep LOCAL"|wc -l`
- f_lp=250
- if [ $v_lp -gt $f_lp ]
- then
- mailmsg="the pga process's number is larger than 100,now is $v_lp"
- echo "$mailmsg" > /tmp/pga_$HOSTNAME.log
- scp /tmp/pga_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/pga_$HOSTNAME.log
- ssh -loracle csdb1 "mail -s "pga_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/pga_$HOSTNAME.log"
- else
- echo "${dbname}'s pga process's number is normal,now is $v_lp"
- fi
- echo ""
- echo "cron process"
- echo "************************"
- v_c=`ps -ef|grep cron|grep -v "grep cron"|wc -l`
- if [ $v_c -ne 1 ]
- then
- mailmsg="the cron process error"
- echo "$mailmsg" > /tmp/cron_$HOSTNAME.log
- scp /tmp/cron_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/cron_$HOSTNAME.log
- ssh -loracle csdb1 "mail -s "cron_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/cron_$HOSTNAME.log"
- else
- echo "the cron process is running normally"
- fi
- #load
- echo ""
- echo "load"
- echo "************************"
- v_ld=`w|grep load|grep -v "grep load"|sed 's/,//g'|awk '{print $10}'`
- vv_ld=`printf "%2.0f" $v_ld`
- f_ld=3
- if [ $vv_ld -gt $f_ld ]
- then
- mailmsg="${dbname}'s load is larger than $f_ld,now is $v_ld"
- echo "$mailmsg" > /tmp/load_$HOSTNAME.log
- scp /tmp/load_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/load_$HOSTNAME.log
- ssh -loracle csdb1 "mail -s "load_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/load_$HOSTNAME.log"
- else
- echo "${dbname}'s load is normal,now is $v_ld"
- fi
- #CPU
- echo ""
- echo "CPU blocked number"
- echo "************************"
- v_bp=`vmstat|sed -n 3p|awk '{print $2}'`
- f_bp=2
- if [ $v_bp -gt $f_bp ]
- then
- mailmsg="${dbname}'s runquenue is larger than $f_bp,now is $v_bp"
- echo "$mailmsg" > /tmp/runquenue_$HOSTNAME.log
- scp /tmp/runquenue_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/runquenue_$HOSTNAME.log
- ssh -loracle csdb1 "mail -s "runquenue_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/runquenue_$HOSTNAME.log"
- else
- echo "the runquenue is normal,now the blocked job number is $v_bp"
- fi
- #swap
- echo ""
- echo "swap"
- echo "************************"
- v_swap=`free|sed -n 4p|awk '{print $3}'`
- f_swap=200000
- if [ $v_swap -gt $f_swap ]
- then
- mailmsg="${dbname}'s swap is larger than $f_swap,now is $v_swap"
- echo "$mailmsg" > /tmp/swap_$HOSTNAME.log
- scp /tmp/swap_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/swap_$HOSTNAME.log
- ssh -loracle csdb1 "mail -s "swap_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/swap_$HOSTNAME.log"
- else
- echo "the swap is normal,now is ${v_swap}k"
- fi
- #memories
- echo ""
- echo "memories"
- echo "************************"
- free|sed -n 2p
- #network
- echo ""
- echo "network"
- echo "************************"
- /sbin/ifconfig|grep "inet addr"|grep -v "127.0.0.1"
- echo ""
- echo "---------------END---------------------"