#!/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
#基于同事的脚本,做了一下修改
#目的: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