python c/s模式下的內存監控模擬代碼

對與服務端咱們能夠本身寫些API供監控使用。python

如下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!"

以上僅是案例,你們能夠在此基礎上擴展修改的。app


若是想了解更多,請關注咱們的公衆號
公衆號ID:opdevos
掃碼關注
socket

gongzhouhao.jpg

相關文章
相關標籤/搜索