搜索
Hi~登录注册
查看: 1563|回复: 0

openVZ架构VPS母机服务器内存超售检测脚本 - VPS教程

[复制链接]

1892

主题

1899

帖子

6406

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6406
发表于 2015-4-16 16:30:54 | 显示全部楼层 |阅读模式
注意:这是一个python脚本,将以下文本保存为vz_checker.py后开始运行。#!/usr/bin/env python#-*- coding:utf-8 -*-import sysclass beanAttr: held = 0 maxheld = 0 barrier = 0 limit = 0 failcnt = 0 def getNum(self, num, type):  if type == 'k':   return num/1024.0  elif type == 'm':   return num/(1024.0 * 1024.0)  elif type == 'g':   return num/(1024.0 * 1024.0 * 1024.0)  elif type == 'w':   return num/10000.0  elif type == 'e':   return num/(10000.0 * 10000.0)  elif type == 'n':   return num  else:   raise Exception("type not support")   return None def getHeld(self, type):  return self.getNum(self.held, type) def getMaxHeld(self, type):  return self.getNum(self.maxheld, type) def getBarrier(self, type):  return self.getNum(self.barrier, type) def getLimit(self, type):  return self.getNum(self.limit, type) def getFailcnt(self, type):  return self.getNum(self.failcnt, type)class beanPageAttr(beanAttr): def getNum(self, num, type):  return beanAttr.getNum(self, num * 4096, type)class Kmemsize(beanAttr): passclass Lockedpages(beanPageAttr): passclass Privvmpages(beanPageAttr): passclass Shmpages(beanPageAttr): passclass Numproc(beanAttr): passclass Physpages(beanPageAttr): passclass Vmguarpages(beanPageAttr): passclass Oomguarpages(beanPageAttr): passclass Numtcpsock(beanAttr): passclass Numflock(beanAttr): passclass Numpty(beanAttr): passclass Numsiginfo(beanAttr): passclass Tcpsndbuf(beanAttr): passclass Tcprcvbuf(beanAttr): passclass Othersockbuf(beanAttr): passclass Dgramrcvbuf(beanAttr): passclass Numothersock(beanAttr): passclass Dcachesize(beanAttr): passclass Numfile(beanAttr): passclass Numiptent(beanAttr): passclass beanData: _uid = None _cur = None kmemsize = Kmemsize() lockedpages = Lockedpages() privvmpages = Privvmpages() shmpages = Shmpages() numproc = Numproc() physpages = Physpages() vmguarpages = Vmguarpages() oomguarpages = Oomguarpages() numtcpsock = Numtcpsock() numflock = Numflock() numpty = Numpty() numsiginfo = Numsiginfo() tcpsndbuf = Tcpsndbuf() tcprcvbuf = Tcprcvbuf() othersockbuf = Othersockbuf() dgramrcvbuf = Dgramrcvbuf() numothersock = Numothersock() dcachesize = Dcachesize() numfile = Numfile() numiptent = Numiptent() class Line: msgPos = 0 ptr = 0 inMsg = 0 def __init__(self, line):  self.msgPos = 0  self.ptr = 0  self.inMsg = 0  self.line = line def getOutMsgTry(self):  if self.inMsg != 1:   return None  tmp_ptr = self.ptr  while self.line[tmp_ptr] != ' ':   if self.line[tmp_ptr] == '\n':    break   tmp_ptr += 1  return tmp_ptr def getOutMsg(self):  resu_ptr = self.getOutMsgTry()  if resu_ptr != None:   self.ptr = resu_ptr   self.inMsg = 0   return 1  else:   return 0 def getInMsg(self):  if self.inMsg != 0:   return  while self.line[self.ptr] == ' ':   self.ptr += 1  self.inMsg = 1  self.msgPos +=1 def getAttrNum(self):  param_end_ptr = self.getOutMsgTry()  assert param_end_ptr != None  param = int(self.line[self.ptr:param_end_ptr])  return paramdef splitLine(bd, line_obj): resu = {} while line_obj.line[line_obj.ptr] != '\n':  line_obj.getOutMsg()  line_obj.getInMsg()  if line_obj.msgPos == 1:   if line_obj.line[line_obj.ptr].isdigit():    j = line_obj.ptr + 1    while line_obj.line[j].isdigit():     j += 1    bd._uid = int(line_obj.line[line_obj.ptr:j])    line_obj.msgPos = 0   else:     param_end_ptr = line_obj.getOutMsgTry()       assert param_end_ptr != None    param = line_obj.line[line_obj.ptr:param_end_ptr]    if hasattr(bd, param):     bd._cur = getattr(bd, param)    else:     break  if line_obj.msgPos == 2:     bd._cur.held = line_obj.getAttrNum()  if line_obj.msgPos == 3:     bd._cur.maxheld = line_obj.getAttrNum()  if line_obj.msgPos == 4:     bd._cur.barrier = line_obj.getAttrNum()  if line_obj.msgPos == 5:     bd._cur.limit = line_obj.getAttrNum()  if line_obj.msgPos == 6:     bd._cur.failcnt = line_obj.getAttrNum()      if len(sys.argv) < 2: print 'Useage: \npython vz_checker.py filename' exit()bd = beanData()filename = sys.argv[1]print 'filename is:[%s]'%(filename)fd = open(filename)i = 0for line in fd: line_obj = Line(line)  splitLine(bd, line_obj)fd.close()print ''print '%-50s used:[%0.3fM] max_used:[%0.3fM] limit:[%0.3fM] fail_count:[%d]'\ %(u'Kernel Mem Info(内核态内存,不可被swap):', bd.kmemsize.getNum(bd.kmemsize.held, 'm'), \ bd.kmemsize.getNum(bd.kmemsize.maxheld, 'm'), \ bd.kmemsize.getNum(bd.kmemsize.barrier, 'm'), \ bd.kmemsize.getNum(bd.kmemsize.failcnt, 'n'), )print '%-50s used:[%0.3fM] max_used:[%0.3fM] limit:[%0.3fM] fail_count:[%d]'\ %(u'Mem already allocated Info(突发内存):', bd.privvmpages.getNum(bd.privvmpages.held, 'm'), \ bd.privvmpages.getNum(bd.privvmpages.maxheld, 'm'), \ bd.privvmpages.getNum(bd.privvmpages.barrier, 'm'), \ bd.privvmpages.getNum(bd.privvmpages.failcnt, 'n'), )print '%-50s used:[%0.3fM] max_used:[%0.3fM] limit:[%0.3fM] fail_count:[%d]'\ %(u'Ram actually used(实际使用的母鸡内存):', bd.physpages.getNum(bd.physpages.held, 'm'), \ bd.physpages.getNum(bd.physpages.maxheld, 'm'), \ bd.physpages.getNum(bd.physpages.limit, 'm'), \ bd.physpages.getNum(bd.physpages.failcnt, 'n'), )print '%-50s used:[%0.3fM] max_used:[%0.3fM] limit:[%0.3fM] fail_count:[%d]'\ %(u'Mem (Ram + swap) used(使用的母鸡内存+swap):', bd.oomguarpages.getNum(bd.oomguarpages.held, 'm'), \ bd.oomguarpages.getNum(bd.oomguarpages.maxheld, 'm'), \ bd.oomguarpages.getNum(bd.oomguarpages.barrier, 'm'), \ bd.oomguarpages.getNum(bd.oomguarpages.failcnt, 'n'), )print '%-50s used:[%d] max_used:[%d] limit:[%d] fail_count:[%d]'\ %(u&#39roc Num(进程数):', bd.numproc.getNum(bd.numproc.held, 'n'), \ bd.numproc.getNum(bd.numproc.maxheld, 'n'), \ bd.numproc.getNum(bd.numproc.limit, 'n'), \ bd.numproc.getNum(bd.numproc.failcnt, 'n'), )print '%-50s used:[%d] max_used:[%d] limit:[%d] fail_count:[%d]'\ %(u'TCP Socket Num(Tcp连接数):', bd.numtcpsock.getNum(bd.numtcpsock.held, 'n'), \ bd.numtcpsock.getNum(bd.numtcpsock.maxheld, 'n'), \ bd.numtcpsock.getNum(bd.numtcpsock.limit, 'n'), \ bd.numtcpsock.getNum(bd.numtcpsock.failcnt, 'n'), )print '%-50s used:[%d] max_used:[%d] limit:[%d] fail_count:[%d]'\ %(u'Max SSH login Num(SSH登陆用户数):', bd.numpty.getNum(bd.numpty.held, 'n'), \ bd.numpty.getNum(bd.numpty.maxheld, 'n'), \ bd.numpty.getNum(bd.numpty.limit, 'n'), \ bd.numpty.getNum(bd.numpty.failcnt, 'n'), )print '%-50s used:[%0.3fM] max_used:[%0.3fM] limit:[%0.3fM] fail_count:[%d]'\ %(u'TCP Send Buff(Tcp发送缓冲区):', bd.tcpsndbuf.getNum(bd.tcpsndbuf.held, 'm'), \ bd.tcpsndbuf.getNum(bd.tcpsndbuf.maxheld, 'm'), \ bd.tcpsndbuf.getNum(bd.tcpsndbuf.barrier, 'm'), \ bd.tcpsndbuf.getNum(bd.tcpsndbuf.failcnt, 'n'), )print '%-50s used:[%0.3fM] max_used:[%0.3fM] limit:[%0.3fM] fail_count:[%d]'\ %(u'TCP Receive Buff(Tcp接收缓冲区):', bd.tcprcvbuf.getNum(bd.tcprcvbuf.held, 'm'), \ bd.tcprcvbuf.getNum(bd.tcprcvbuf.maxheld, 'm'), \ bd.tcprcvbuf.getNum(bd.tcprcvbuf.barrier, 'm'), \ bd.tcprcvbuf.getNum(bd.tcprcvbuf.failcnt, 'n'), )print ''print '%-50s used:[%0.3fM] percent:[%0.3f%%]'\ %(u'Swap(使用的Swap,越大超售越严重):', bd.oomguarpages.getNum(bd.oomguarpages.held - bd.physpages.held, 'm'), \ bd.numpty.getNum(1.0 * (bd.oomguarpages.held - bd.physpages.held) / bd.oomguarpages.held * 100, 'n'))print '%-50s used:[%0.3fM] limit:[%0.3fM]'\ %(u'Guarantee Mem(保证内存):', bd.numpty.getNum(bd.oomguarpages.held * 4096 + \      bd.kmemsize.held + \      bd.tcpsndbuf.held + \      bd.tcprcvbuf.held + \      bd.othersockbuf.held + \      bd.dgramrcvbuf.held , 'm'), \ bd.oomguarpages.getNum(bd.oomguarpages.barrier, 'm'))print ''关键词:openvz母机检测脚本内存超售检测
公众微信:idc5ahl
公众QQ:吾爱互联
关注公众微信,公众QQ每天领现金卡密
卡密介绍(http://www.5ahl.com/thread-2182-1-1.html
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 点我注册

快速回复 返回顶部 返回列表