查询Ceph的OSD占用内存的脚本

# -*- coding: UTF-8 -*-
import os
import sys
import json
import psutil
import commands
from prettytable import PrettyTable
def main():
   if len(sys.argv) == 1:
       printosdmemtable("table")
   elif sys.argv[1] == 'json':
       printosdmemtable("json")

def printosdmemtable(chosse):
       data_dic = {}
       osd_list={}
       row = PrettyTable()
       row.header = True
       memlist = ["OSD/MEM"]
       memchose = [ 'VIRT','RES']
       for meminfo in memchose:
           memlist.append("%s" %meminfo )
       row.field_names = memlist
       for root, dirs, files in os.walk('/var/run/ceph/'):
           for name in files:
               if "osd"  in name and "pid" in name :
                   osdlist = []
                   osdthlist=[]
                   for osdmem in range(len(memchose)):
                       osdlist.append(" ")
                   pidfile=root+ name
                   osdid=commands.getoutput('ls  %s|cut -d "." -f 2 2>/dev/null'  %pidfile )
                   osdpid = commands.getoutput('cat %s  2>/dev/null' %pidfile)
                   osd_runmemvsz = commands.getoutput('ps -p %s  -o vsz |grep -v VSZ 2>/dev/null' %osdpid)
                   osd_runmemrsz = commands.getoutput('ps -p %s  -o rsz |grep -v RSZ 2>/dev/null' %osdpid)
                   osdname="osd."+osdid
                   osdlist.insert(0,osdname)
                   osdlist[1] = str(int(osd_runmemvsz)/1024)+"KB"
                   osdlist[2] = str(int(osd_runmemrsz)/1024)+"KB"
                   vm_dic = {}
                   vm_dic['VSZ']= str(int(osd_runmemvsz)/1024)+"KB"
                   vm_dic['RSZ']= str(int(osd_runmemrsz)/1024)+"KB"
                   osd_list[osdname] = vm_dic
                   data_dic['osdmemused'] = osd_list
                   if chosse == "table":
                       row.add_row(osdlist)
                   elif chosse == "json":
                       row = json.dumps(data_dic,separators=(',', ':'))
       print row

if __name__ == '__main__':
   main()


运行脚本

[root@lab8106 getmem]# python getmem.py 
+---------+-------+------+
| OSD/MEM |  VIRT | RES  |
+---------+-------+------+
|  osd.0  | 825KB | 43KB |
|  osd.1  | 826KB | 43KB |
+---------+-------+------+
[root@lab8106 getmem]# python getmem.py json
{"osdmemused":{"osd.1":{"VSZ":"826KB","RSZ":"43KB"},"osd.0":{"VSZ":"825KB","RSZ":"43KB"}}}
上一篇:33.Apollo引入第三方Jar包编译


下一篇:为什么要获得阿里云acp认证?阿里云acp考试题库有哪些内容?