zoukankan      html  css  js  c++  java
  • 查询Ceph的OSD占用内存

    前言

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

    代码

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

    #!/usr/bin/env python
    # -*- 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 = ["OSDMEM"]
            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 
    +---------+-------+------+
    | OSDMEM |  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"}}}
    

    附加

    如果在/var/run/ceph下面没有生成pid,就在配置文件/etc/ceph/ceph.conf当中提前加好配置文件然后重启进程

    pid_file=/var/run/$cluster/$type.$id.pid

  • 相关阅读:
    GIT在Linux上的安装和使用简介心得
    Android开发环境使用到工具的认识心得
    Android系统移植与驱动开发心得
    嵌入式Linux的调试技术
    硬件抽象层——HAL
    Linux代码的重用与强行卸载Linux驱动
    控制发光二极管
    详细讲解Linux驱动程序
    搭建测试环境——针对S3C6410开发板
    有了源代码,当然还需要编译喽!!
  • 原文地址:https://www.cnblogs.com/zphj1987/p/13575393.html
Copyright © 2011-2022 走看看