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

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

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

Server端

#!/usr/bin/env python#Author:Badboy#CreatBy:2014/5/1import socket,selecthost=”192.168.1.61″port=1001sock=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=0def 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)continueif 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/1import socket,sysmem_check=”mem”host=”192.168.1.61″port=1001sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.connect((host,port))sock.send(mem_check)mem_warning=40mem_critical=20mem_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!”

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

本文出自 “坏男孩” 博客,请务必保留此出处

没有绝望的处境,只有对处境绝望的人。

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

相关文章:

你感兴趣的文章:

标签云: