procMemChk.sh 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/bin/bash
  2. #Whritted: dufs
  3. #E-mail: fengshan.du@zznode.com
  4. #Date: 2016-09-19 13:00
  5. # process memory check
  6. # config file : conf/procMemChk.conf proc_Key,proc_Log,mem_Thrd
  7. # process running server conf/ps_info_cur.txt exp. 10.102.52.13_22444,DFmSocketServer DCASServer DAlarmForwordServer DSECServer DWebService DWebUIServer
  8. #
  9. SH_NAME=`basename $0`
  10. SH_HOME=$HOME/zsjk
  11. SH_Log=$SH_HOME/log/${0%\.sh*}.log
  12. function outlog {
  13. #echo $*
  14. echo "`date '+%Y-%m-%d %T'` : " "$*" >> $SH_Log
  15. logSize=`ls -lrt $SH_Log|awk '{print $5}'`
  16. if [ $logSize -gt 10240000 ]
  17. then
  18. cp -rp $SH_Log $SH_Log.`date '+%Y-%m-%d'`
  19. gzip $SH_Log.`date '+%Y-%m-%d'`
  20. cat /dev/null>$SH_Log
  21. fi
  22. }
  23. outlog =============================================================
  24. outlog start check
  25. sysapp="【集中故障】"
  26. ip_list=$SH_HOME/conf/procMemChk.conf
  27. if [ ! -f $ip_list ]
  28. then
  29. outlog can not find $ip_list, please check !!!
  30. exit 0
  31. fi
  32. ps_serv=$SH_HOME/conf/ps_info_cur.txt
  33. if [ ! -f $ps_serv ]
  34. then
  35. outlog can not find $ps_serv, please check !!!
  36. exit 0
  37. fi
  38. cd $SH_HOME/bin
  39. for line in `cat $ip_list`
  40. do
  41. msg=""
  42. msgFlg=0
  43. # msgFlg: 0 no message, 1 mem ,2 cpu ,12 mem and cpu
  44. sharppos=$(echo $line|awk '{print index($1,"#")}')
  45. if [ $sharppos = 1 ]
  46. then
  47. #echo remarked line,ignore
  48. continue
  49. fi
  50. outlog -------------------------------------------------------------
  51. proc_Key=`echo $line | awk -F"," '{print $1}'`
  52. proc_Log=`echo $line | awk -F"," '{print $2}'`
  53. mem_Thrd=`echo $line | awk -F"," '{print $3}'`
  54. outlog read config: proc_Key $proc_Key , proc_Log $proc_Log , mem_Thrd $mem_Thrd
  55. ipPorts=`grep -w $proc_Key $ps_serv|awk -F"," '{print $1}'`
  56. for Line in `echo $ipPorts`
  57. do
  58. Local_IP=`echo $Line|awk -F"_" '{print $1}'`
  59. ssh_port=`echo $Line|awk -F"_" '{print $2}'`
  60. chk_user="iss"
  61. outlog $proc_Key is running on $Local_IP:$ssh_port $chk_user
  62. sshTmp=$SH_HOME/data/procMemChk_$proc_Key.$Local_IP.$ssh_port
  63. ssh -t -p $ssh_port $chk_user@$Local_IP "cd ISS_LOG;tail -200 $proc_Log|grep 'Current memory'|tail -1;tail -200 $proc_Log|grep 'Free memory'|tail -1" >$sshTmp
  64. rowNum=`cat $sshTmp|wc -l`
  65. if [ $rowNum -eq 0 ]
  66. then
  67. outlog can not get $proc_Key info from $Local_IP, please check !!!
  68. curT=`date '+%Y-%m-%d %T'`
  69. msg="$sysapp从$Local_IP:$ssh_port未获取到 $proc_Key 的内存信息,请检查。"
  70. msgFlg=1
  71. else
  72. TimeStp=`cat $sshTmp|grep 'Current memory'|tr -d '\r'|sed -s 's/ //g'|awk -F"." '{print $1}'`
  73. usedMem=`cat $sshTmp|grep 'Current memory'|tr -d '\r'|sed -s 's/ //g'|awk -F":" '{print $4}'`
  74. isFree=`cat $sshTmp|grep 'Free memory'|tr -d '\r'|sed -s 's/^M//g'|wc -l`
  75. #echo $isFree
  76. if [ $isFree -ge 1 ]
  77. then
  78. TimeStpF=`cat $sshTmp|grep 'Free memory'|tr -d '\r'|sed -s 's/ //g'|awk -F"." '{print $1}'`
  79. freeMem=`cat $sshTmp|grep 'Free memory'|tr -d '\r'|sed -s 's/ //g'|awk -F":" '{print $4}'`
  80. else
  81. TimeStpF=$TimeStp
  82. freeMem=0
  83. fi
  84. #echo $usedMem $TimeStp
  85. #echo $freeMem $TimeStpF
  86. if [ "$TimeStp" = "$TimeStpF" ]
  87. then
  88. usedMemF=`echo "$usedMem-$freeMem"|bc`
  89. fi
  90. #echo $usedMemF
  91. if [ $usedMemF -ge $mem_Thrd ]
  92. then
  93. outlog "$Local_IP:$ssh_port $proc_Key usedMem = $usedMem K, freeMem = $freeMem K, larger then $mem_Thrd K, please check!!!"
  94. msgFlg=1
  95. msg="$sysapp从$Local_IP:$ssh_port获取到$proc_Key的内存为${usedMem}K(日志时间:$TimeStp),大于门限${mem_Thrd}K,请检查。"
  96. else
  97. outlog "$Local_IP:$ssh_port $proc_Key usedMem = $usedMem K, freeMem = $freeMem K, less then $mem_Thrd K, it is OK."
  98. fi
  99. fi
  100. if [ $msgFlg -gt 0 ]
  101. then
  102. msg="$msg巡检时间:`date '+%Y-%m-%d %T'`"
  103. outlog send message $msg
  104. $SH_HOME/bin/zsjkAlarmIsert.sh "进程内存监测,1,$msg,10.102.52.9,zsjk/bin/procMemChk.sh"
  105. #send restart info to running server.
  106. echo "`date +'%Y-%m-%d %T'` usedMem = $usedMem K" >${proc_Key}.restart
  107. scp -P$ssh_port ${proc_Key}.restart $chk_user@$Local_IP:./zsjk/restartflag/
  108. fi
  109. done
  110. outlog -------------------------------------------------------------
  111. done
  112. outlog =============================================================
  113. exit 0