#!/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 |
|