手记

python c/s模式下的内存监控模拟代码


对与服务端我们可以自己写些API供监控使用。

以下Code只是简单的给监控机吐出固定的mem值:80,不过,可以根据后期需要来开发相应的模块。此次我采用的是select来作为server端的socket监控,不过对与他的1024限制来说,我觉得仅作为监控服务端来说足够了,如果作为更大并发的server端话,可以使用poll,epoll,或者多线程并且结合队列来做到一定的限制,别让过多的连接把服务器干挂。

Server端

#!/usr/bin/env python

#Author:Badboy

#CreatBy:2014/5/1

import socket,select

host="192.168.1.61"

port=1001

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

sock.setblocking(0)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

sock.bind((host,port))

sock.listen(1024)

inputs=[sock]

outputs=[]

addrs={}

debug=0

def get_free_mem():

    return "80"

def send_data(sock,data):

    if data.strip()=='mem':

        sock.send(get_free_mem())

    else:

        sock.send("Error key words!")

while inputs:

    rlist,wlist,elist=select.select(inputs,outputs,[],0)

    for s in rlist:

        if s == inputs[0]:

            clientsock,clientaddr=s.accept()

            inputs.append(clientsock)

            addrs[clientsock]=clientaddr[0]

            print "ClientAddr:",clientaddr[0]

            if debug:

                clientsock.send("Welcome here!\r\n")

        else:

            words=s.recv(1024)

            if not words:

                print "Byebye",addrs[s]

                s.close()

                inputs.remove(s)

                del addrs[s]

                if s in outputs:

                    outputs.remove(s)

                continue

            if s not in outputs:

                outputs.append(s)

    for s in wlist:

        send_data(s,words)

        outputs.remove(s)

Client

#!/usr/bin/env python

#Author Badboy

#CreatBy:2014/5/1

import socket,sys

mem_check="mem"

host="192.168.1.61"

port=1001

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

sock.connect((host,port))

sock.send(mem_check)

mem_warning=40

mem_critical=20

mem_size=sock.recv(1024)

if mem_size=="Error key words!":

   print "Please check client!"

   sys.exit(1)

mem_size=int(mem_size)

if mem_size > mem_warning:

    print "Mem Size Ok!"

elif mem_size < mem_critical:

    print "Mem Size Critical!"

else:

    print "Mem Size Warning!"

以上仅是案例,大家可以在此基础上扩展修改的。

如果想了解更多,请关注我们的公众号

公众号ID:opdevos

扫码关注

gongzhouhao.jpg

©著作权归作者所有:来自51CTO博客作者hahazhu0634的原创作品,如需转载,请注明出处,否则将追究法律责任


0人推荐
随时随地看视频
慕课网APP