python物理曲线图_python绘图cpu/mem监控曲线

输入日志格式举例:[2012-09-26 12:55:31] 16070 sosotest 20 0 8302m 41m 11m S 0 0.1 0:00.93 java 42836 8501676 HandleNum:28

# -*- coding: cp936 -*-

import re, sys, os

import time

from pylab import *

'''

修改:2010.04.23 增加开始运行时间信息 修改参数,将进程号作为文件名一部分

修改:2010.04.25 将参数1,2呼唤,第一个参数为日志文件,第二个为进程id

修改:2010.10.31 增加core点显示,core时记录在程序运行目录

修改:2010.11.30 将两幅图绘制在一起,日志加入ps产生的内存详细信息

修改:2011.06.24 加入进程名,表示有效结果日志

'''

def getCoreLst(proclst):

retLst = []

curPid = proclst[0]

for i in range(1, len(proclst)):

if curPid != proclst[i]:

curPid = proclst[i]

retLst.append(i+1)

return retLst

virt = []

res = []

cpu = []

proc = []

allrcd = []#所有记录

timeInterval = 10

processname = "empty process"

if len(sys.argv) != 5 and len(sys.argv) != 4:

print "Usage: python %s fileName mem_cpu.png processname timeinterval[default:10]" %(__file__)

print "Usage: python %s fileName processname timeinterval[default:10]" %(__file__)

sys.exit()

print "VIRT RES CPU%"

if len(sys.argv) == 5:

srcfileName = sys.argv[2]

processname = sys.argv[3]

timeInterval = int(sys.argv[4])

else:

srcfileName = "cpu_mem.png"

processname = sys.argv[2]

timeInterval = int(sys.argv[3])

bFoundBeginTime = False

bFoundEndTime = False

strCurTime = ""

strBeginTime = ""

strEndTime = ""

f = open(sys.argv[1], "r")

line = f.readline()

strBeginTime = line[line.find('[')+1:line.find(']')]

f.seek(0, os.SEEK_SET)

while True:

line = f.readline()

if len(line)==0: break

#if line.find("ProcessID:%s" % processId) == -1:

# continue

line = line.strip()

strEndTime = line[line.find('[')+1:line.find(']')] #获取当前时间

try:

if len(line.split()) != 17:

continue

if not processname in line:

continue

lp = line.split()[2:]

lp0 = []

for i in range(0, len(lp)):

if len(lp[i])>0: lp0.append(lp[i])

#print lp0[]进程号

proc.append(int(lp0[0]))

#虚拟内存大小

if lp0[4][-1]!='m' and lp0[4][-1]!='g': fRet = float(lp0[4])/(1024*1024)

if lp0[4][-1]=='m': fRet = float(lp0[4][0:-1])/1024

if lp0[4][-1]=='g': fRet = float(lp0[4][0:-1])

virt.append(fRet)

#实际内存大小

if lp0[5][-1]!='m' and lp0[5][-1]!='g': fRet = float(lp0[5])/(1024*1024)

if lp0[5][-1]=='m': fRet = float(lp0[5][0:-1])/1024

if lp0[5][-1]=='g': fRet = float(lp0[5][0:-1])

res.append(float(fRet))

#cpu占用率

cpu.append(float(lp0[8]))

allrcd.append(line)

except:

print "Line data Error as follow..."

print line

#time.sleep(1)

#print "abc", lp0[4], lp0[5], lp0[8]

f.close()

print "Show len ",len(virt)

print "耗时%.3f小时" % (timeInterval*len(virt)/(60*60.0))

print "开始时间: %s" % strBeginTime

print "结束时间: %s" % strEndTime

print virt

xSpan = len(virt)

a = max(virt)

b = max(res)

ySpan = max(a, b)#内存最高点

cpu_mem_rate = max(cpu) / ySpan#计算cpu与内存的归一化比率

#归一化CPU损耗

for i in range(0, len(cpu)):

cpu[i] = cpu[i] / cpu_mem_rate

corelst_x = getCoreLst(proc)

corelst_cpu_y = []

corelst_virt_y = []

corelst_res_y = []

for i in range(0,len(corelst_x)):

corelst_cpu_y.append(cpu[corelst_x[i]])

corelst_virt_y.append(virt[corelst_x[i]])

corelst_res_y.append(res[corelst_x[i]])

#统计core点开始

fpCorePoint=file("error_core.log", "at")

for i in range(0, len(corelst_x)):

fpCorePoint.write("%s\n" % allrcd[corelst_x[i]])

fpCorePoint.close()

#统计core点结束

#为了画点,将横轴坐标乘以时间间隔

for i in range(0, len(corelst_x)):

corelst_x[i]=corelst_x[i]*timeInterval

strDuration = "StartTime:%s EndTime:%s \n Duration %d minutes %d hours" % (strBeginTime, strEndTime, len(virt)*timeInterval/60, len(virt)*timeInterval/3600)

x = []

for i in range(0, len(virt), 1):

x.append(timeInterval*i)#每10秒获取一次信息

#先绘制CPU图

print "Cpu len: %d %d " % (len(x), len(cpu))

figure(1)

axis([0, len(cpu), 0, max(cpu)])#布置绘图区域

strTitle = "______________________________\n" + strDuration + " CPU_rate:%.2f \n--------------------------" % cpu_mem_rate

title(strTitle, fontsize=12)

xlabel("TimeEclipsed/sec", fontsize=12, ha='left')

ylabel('CPU-Rate:%.2f | MEM/g' % cpu_mem_rate , fontsize=12, va = 'top')

plot(x, cpu, 'g') #绘制cpu

#画core点

print "CPU Core Info:"

print "Core at ", corelst_x

print "Core at ", corelst_cpu_y

#plot(corelst_x, corelst_cpu_y, "rs") #绘制cpu的core点

#title("MEM-%s \n%s" % (strBeginTime, strDuration), fontsize=12)

#xlabel("TimeEclipsed/sec", fontsize=12)

#ylabel('Memery/g', fontsize=12)

plot(x, virt, 'b')#绘制虚拟内存

plot(x, res, 'r') #绘制物理内存

#画core点

print "MEM Core Info:"

print "Core at ", corelst_x

print "Core at ", corelst_virt_y

print "Core at ", corelst_res_y

#plot(corelst_x, corelst_virt_y, "rs") #绘制虚拟内存的core点

plot(corelst_x, corelst_res_y, "cs") #绘制物理内存的core点

grid()

savefig(srcfileName, dpi=85)

strCmd = srcfileName + "/b"

os.system(strCmd)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值