1. 这段时间学习shell编程,特编写一个了监控数据库服务器性能的脚本,这个脚本可以监控进程,内存,swap,PGA连接数,网络,还有load 
  2.  
  3. #!/bin/sh 
  4.  
  5. #creater:danchen 
  6. #date:2007-3-27 
  7.  
  8. #local varrible 
  9. mailto='username@163.com' 
  10.  
  11. dbname=`hostname|sed 's/_.*//g'
  12. echo "" 
  13. echo $dbname 
  14. echo "************************" 
  15.  
  16. #process 
  17. echo "" 
  18. echo "total processes" 
  19. echo "************************" 
  20. ps -ef|wc -l 
  21.  
  22. echo "" 
  23. echo "PGA processes" 
  24. echo "************************" 
  25. v_lp=`ps -ef|grep LOCAL|grep -v "grep LOCAL"|wc -l` 
  26. f_lp=250 
  27. if [ $v_lp -gt $f_lp ] 
  28.    then 
  29.           mailmsg="the pga process's number is larger than 100,now is $v_lp" 
  30.           echo "$mailmsg" > /tmp/pga_$HOSTNAME.log 
  31.           scp /tmp/pga_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/pga_$HOSTNAME.log 
  32.           ssh -loracle csdb1 "mail -s "pga_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/pga_$HOSTNAME.log" 
  33.    else 
  34.           echo "${dbname}'s pga process's number is normal,now is $v_lp" 
  35. fi 
  36.  
  37. echo "" 
  38. echo "cron process" 
  39. echo "************************" 
  40. v_c=`ps -ef|grep cron|grep -v "grep cron"|wc -l` 
  41. if [ $v_c -ne 1 ] 
  42.       then 
  43.            mailmsg="the cron process error" 
  44.            echo "$mailmsg" > /tmp/cron_$HOSTNAME.log 
  45.            scp /tmp/cron_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/cron_$HOSTNAME.log 
  46.            ssh -loracle csdb1 "mail -s "cron_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/cron_$HOSTNAME.log" 
  47.       else 
  48.            echo "the cron process is running normally" 
  49. fi 
  50.  
  51. #load 
  52. echo "" 
  53. echo "load" 
  54. echo "************************" 
  55. v_ld=`w|grep load|grep -v "grep load"|sed 's/,//g'|awk '{print $10}'
  56. vv_ld=`printf "%2.0f" $v_ld` 
  57. f_ld=3 
  58. if [ $vv_ld -gt $f_ld ] 
  59.    then 
  60.        mailmsg="${dbname}'s load is larger than $f_ld,now is $v_ld" 
  61.        echo "$mailmsg" > /tmp/load_$HOSTNAME.log 
  62.        scp /tmp/load_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/load_$HOSTNAME.log 
  63.        ssh -loracle csdb1 "mail -s "load_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/load_$HOSTNAME.log" 
  64.    else 
  65.        echo "${dbname}'s load is normal,now is $v_ld" 
  66. fi 
  67.  
  68. #CPU 
  69. echo "" 
  70. echo "CPU blocked number" 
  71. echo "************************" 
  72. v_bp=`vmstat|sed -n 3p|awk '{print $2}'
  73. f_bp=2 
  74. if [ $v_bp -gt $f_bp ] 
  75.    then 
  76.        mailmsg="${dbname}'s runquenue is larger than $f_bp,now is $v_bp" 
  77.        echo "$mailmsg" > /tmp/runquenue_$HOSTNAME.log 
  78.        scp /tmp/runquenue_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/runquenue_$HOSTNAME.log 
  79.        ssh -loracle csdb1 "mail -s "runquenue_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/runquenue_$HOSTNAME.log" 
  80.    else 
  81.        echo "the runquenue is normal,now the blocked job number is $v_bp" 
  82. fi 
  83.  
  84. #swap 
  85. echo "" 
  86. echo "swap" 
  87. echo "************************" 
  88. v_swap=`free|sed -n 4p|awk '{print $3}'
  89. f_swap=200000 
  90. if [ $v_swap -gt $f_swap ] 
  91.    then 
  92.        mailmsg="${dbname}'s swap is larger than $f_swap,now is $v_swap" 
  93.        echo "$mailmsg" > /tmp/swap_$HOSTNAME.log 
  94.        scp /tmp/swap_$HOSTNAME.log oracle@csdb1:/opt/devtest_db_logs/swap_$HOSTNAME.log 
  95.        ssh -loracle csdb1 "mail -s "swap_${HOSTNAME}_danger" $mailto < /opt/devtest_db_logs/swap_$HOSTNAME.log" 
  96.     else 
  97.        echo "the swap is normal,now is ${v_swap}k" 
  98. fi 
  99.  
  100. #memories 
  101. echo "" 
  102. echo "memories" 
  103. echo "************************" 
  104. free|sed -n 2p 
  105.  
  106. #network 
  107. echo "" 
  108. echo "network" 
  109. echo "************************" 
  110. /sbin/ifconfig|grep "inet addr"|grep -v "127.0.0.1" 
  111.  
  112. echo "" 
  113. echo "---------------END---------------------"