import bamboos_ssh
import re
import time
'''
本用例通过linux提供的ps和pmap命令监控Bamboo系统里指定进程的内存变化。
'''
##--------------全局参数设置--设置检测范围-------------------------------##
processList = ['./omu','/bin/ffe/vpp/vpp','l3stackMain','srvc','nse','ospfd','nettool_server',
'infoc','ffe_mgmt','usermgr','nat','dhcpd','ntpd','bgpd','sysrepod']
##++++++++++++++++++++++++++++++++++++++++++++++++++++##
def memMonitor(targetSystemIP,psName,repeatRounds,mytest):
rssList = []
privateList = []
##-----------------------------初始化工作------------------------------------- -##
dut1_ssh = bamboos_ssh.bamboos_ssh(targetSystemIP)
print('\n初始时完整获取ps信息,找到目标进程的进程号,获取该进程的pmap信息')
psAllInfo = dut1_ssh.exe_cmd( ['ps -aux'])
psID = getPsID(psName,psAllInfo)
psAllRssStart = getPsAllRss(processList,psAllInfo)
dut1_ssh.exe_cmd( ['pmap -d %s'%psID])
dut1_ssh.exe_cmd(['exit'])
##-----------------------------拷机过程-----------------------------------------##
##主循环多次执行测试员的拷机脚本,每次执行后获取rss内存和private内存信息
for i in range(0,repeatRounds+1):
try:
if 0 == i:
print('\n获取初始内存信息')
else:
print('\n第%d轮测试' % i)
mytest(dut1_ssh)
print('\n第%d次获取内存信息' % i)
rssMem = getRssMem(dut1_ssh,psID)
rssList.append(rssMem)
privateMem = getPrivateMem(dut1_ssh,psID)
privateList.append(int(privateMem))
dut1_ssh.exe_cmd(['exit'])
except BaseException as e:
print(e);print('第%d轮测试时异常终止了'%i);resultPrint(psName, rssList, privateList);break
##最后一轮测试时再次获取ps信息,以及目标进程的pmap信息
print('\n结束时完整获取ps信息,以及目标进程的pmap信息')
psAllInfo = dut1_ssh.exe_cmd(['ps -aux'])
psAllRssEnd = getPsAllRss(processList,psAllInfo)
dut1_ssh.exe_cmd(['pmap -d %s' % psID])
dut1_ssh.exe_cmd(['exit'])
##-------------------显示最终的监测结果------------------------------------------##
print('=========================拷机测试的结果=====================')
resultPrint(psName, rssList, privateList)
compareAllPsRss(processList, psAllRssStart, psAllRssEnd)
##-------------------清理测试环境,结束测试---------------------------------------##
dut1_ssh.close()
##++++++++++++++++++++++++++++++++++++++++++++##
def getPsID(psName,psInfo):
#根据PSInfo检索出psID
# return psID
def getPsAllRss(psNameList,psAllInfo):
#通过psALLInfo检索出所有ps的RSS并返回
# return psRssList
def getRssMem(dut1_ssh,psID):
#根据 'cat /proc/%s/status | grep VmRSS' 命令找出每一个ps的rss内存值
# return rssMem
def getPrivateMem(dut1_ssh,psID):
#根据 'pmap -d %s | grep mapped' 命令找出每一个ps的私有内存值
# return privateMem
def resultPrint(psName,rssList,privateList):
#根据需要输出内存监测结果,可以是炫酷的图形化输出,也可以是简易输出,例如:
print('\n进程%s的物理内存占用趋势为:'%psName)
print(rssList)
print('\n进程%s的私有内存使用趋势为:'%psName)
print(privateList)
def compareAllPsRss(processList,psAllRssStart,psAllRssEnd):
#对所有进程的一个输出,可以是图形化的,也可以是简易的