分享

内存及cpu占用测试方法小结

 知识VS人生 2017-06-27
#!/bin/bash
#基于同事的脚本,做了一下修改
#目的:nmon只能对系统整体监控,不能针对单个进程。
#使用方法:将监控结果粘贴到excel中进行处理,就可以利用曲线看内存与CPU的走势。
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
if [ -z "$5" ];then
  echo "please enter really data"
  echo "sample"
  echo "./scriptname PsName PSport Per Count Path"
  echo "./cpu.sh kbaseserver 6516 10 6 ./foldername"
 else
  Filename=$0 #脚本名
  PsName=$1 #程序名
  PSport=$2 #端口号
  Per=$3  #间隔的秒数
  Count=$4 #记录次数
  Path=$5  #记录文件夹
     mkdir ${Path:2} #创建记录文件夹,我这里并没有对文件夹存在做判断,自己感觉无伤大雅。字符串位置从0开始的;也可以用basename
  kernel=`cat /proc/cpuinfo | grep processor | wc -l` #取系统的内核数
  Date=`date +%y%m%d_%H%M%S` #取系统时间
  PID=`ps -ef |grep $PsName |grep $PSport |grep -v grep|grep -v $Filename|awk '{print $2}'` #取进程号
  echo $PID
  echo "begin"
  echo "------------------------"
    for ((i=1;i<=$4;i++))
     do   
      if [ "-$PID" == "-" ];then
        echo "NO $i The $PsName does not exist." >>$Path/log_$Date.txt #若进程不在,报错在日志里
       else
        echo "NO $i" >>$Path/log_$Date.txt
        VmRSS=`cat /proc/$PID/status |grep -e VmRSS|awk '{print $2}'` #从进程文件中取内存
        VmRSS=$(expr "($VmRSS/1024)"|bc) #将内存换算成M
        echo $VmRSS >> $Path/VmRSS_$Date.txt 
        #为什么不正着数,前边存在多个空格的问题,所以反着数
        CPU=`top -n 1 -p $PID|tail -2|head -1|awk '{print $(NF-4)}'` #从进程文件中取CPU
        CPU=$(expr "scale=2;($CPU/$kernel)"|bc) #换算成单个内核的CPU
        echo  $CPU >> $Path/CPU_$Date.txt
        sleep  $Per #间隔时间
        j=$(($j+1)) #记录总数
      fi  
     done 
    if [ "$j" == "$Count" ] ;then #如果记录总数与实际总数相同,则程序正常
     echo "normal operation" >>$Path/log_$Date.txt
     echo "end"
    fi 
fi 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约