前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查询Ceph的OSD占用内存

查询Ceph的OSD占用内存

作者头像
用户2772802
发布2018-08-06 11:18:26
2.1K0
发布2018-08-06 11:18:26
举报
文章被收录于专栏:磨磨谈磨磨谈

前言

之前写过一篇关于查询OSD的运行的CPU的情况的分享,本篇是讲的获取内存占用的,代码包括两种输出,一种是直接的表格,一种是可以方便解析的json

代码

直接上代码,python才用不久,所以可能代码实现比较低级,主要是看实现的方法

代码语言:javascript
复制
# -*- 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()

运行脚本

代码语言:javascript
复制
[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"}}}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磨磨谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 代码
  • 运行脚本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档