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

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

Server端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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 in rlist:
        if == 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 in outputs:
                    outputs.remove(s)
                continue
            if not in outputs:
                outputs.append(s)
    for in wlist:
        send_data(s,words)
        outputs.remove(s)

Client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/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!"

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

本文转自hahazhu0634 51CTO博客,原文链接:http://blog.51cto.com/5ydycm/1405310,如需转载请自行联系原作者

python c/s模式下的内存监控模拟代码相关推荐

  1. 【OS学习笔记】十六 保护模式四:进入保护模式与在保护模式下访问内存的汇编代码

    本文记录的是之前四篇文章所对应的汇编代码.四篇文章分别是: [OS学习笔记]十二 现代处理器的结构和特点 [OS学习笔记]十三 保护模式一:全局描述符表(GDT) [OS学习笔记]十四 保护模式二:段 ...

  2. 【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制

    上一篇文章学习了段描述符与段描述符各个标志位的含义:段描述符 本篇文章学习如何进入保护模式,并学习如何在保护模式下进行内存访问. 1.如何进入保护模式 假设我们已经用汇编语言将段描述符安装到GDT中( ...

  3. linux分析目录内存,在 Linux x86-64 模式下分析内存映射流程

    前言 在上一篇中我们分析了 Linux 在 x86-32 模式下的虚拟内存映射流程,本章主要继续分析 Linux 在 x86-64 模式下的虚拟内存映射流程. 讨论的平台是 x86-64, 也可以称为 ...

  4. IA-32 Intel手册学习笔记(二)保护模式下的内存管理

    内存管理概述(Memory Management Overview) Inter体系结构的内存管理可分为两部分:分段和分页. 分段提供了一种机制,这种机制可以为每个程序或者任务提供单独的代码.数据和栈 ...

  5. [python] 命令行模式下出现cp65001异常

    问题 在命令行模式下有时会提示cp65001异常,很显然是命令行编码和python环境编码不匹配. 解决 切换命令行编码 unknown encoding: cp65001异常 python安装后进入 ...

  6. 附录-实模式下1M内存

    8086可以访问1MB 内存.其中,0x00000-0x9FFFF 属于常规内存,由内存条提供: 0xF0000-0xFFFFF由主板上的一个芯片提供,即ROM-BIOS. 中间还有一个320KB 的 ...

  7. X86保护模式下的内存寻址

    段选择器 :32位汇编中16位段寄存器(CS.DS.ES.SS.FS.GS)中不再存放段基址,而是段描述符在段描述符表中的索引值,D3-D15位是索引值,D0-D1位是优先级(RPL)用于特权检查,D ...

  8. java命令框编译代码的方式_在命令行模式下如何编译运行Java代码

    由于已经习惯了在Windows环境中进行开发,最近在尝试将开发环境转移到Linux上面.遇到一篇值得参考的外文,特翻译记录一下.[只翻译了部分] 一直被集成开发环境和自动构建工具"溺爱&qu ...

  9. linux cacti 搭建,linux下搭建cacti监控(示例代码)

    一.cacti 监控软件简介 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存         和更新数据,当用户需要查看数据的时候用rrd ...

  10. IDEA 在DEBUG模式下如何不执行后续代码直接停止程序?

    第一步:打断点 第二步:找出控制台 idea可以使用快捷键:两下alt,点击左下角的debug 第三步:出现当前页面 第四步:右键 然后,在弹框中输入符合格式的返回数据,即可直接返回,不再执行下面的代 ...

最新文章

  1. DevExpress XtraTabControl 加载Form
  2. Mips KVM TrapEmulate implemented in Linux
  3. linux平台下Tomcat的安装与优化
  4. mysql 学习笔记 11过程控制
  5. Oracle11gR2_ADG管理之恢复主库的truncate表实战
  6. spark 把一列数据合并_Spark DataFrame列的合并与拆分
  7. Python模块(二)(序列化)
  8. 关于博客改版:我的一些想法与初衷
  9. CSS实现盒子居中对齐的七种方法
  10. K650c + Ubuntu 15.04无法正常关机,重启
  11. 寻租——乞丐没有白拿施舍
  12. 学生管理系统IPO图_高校学生考勤管理系统
  13. 什么是监管数据?什么是监管信息系统?监管数据安全管理办法说了什么?
  14. 有关chromium浏览器 ios 读证书 验证证书 (注没有找到方法),在这里做一下笔记
  15. 伤心----------绝望
  16. 辽宁移动cm201-2机顶盒把720P输出强制修改为1080P输出的方法
  17. c8网络语言意思,老外常用的网络英文缩写
  18. TCPIP卷一(2):二层封装之–PPP与FR
  19. Matlab虚拟现实工具箱——没有VRML Editor时的使用办法(应该是Simulink 3D Animation Demo版本的都是这样)
  20. 近期整活之相关软件之安装说明

热门文章

  1. js圆角矩形旋转(div拼凑)
  2. redis 实战面试
  3. 内存共享【Delphi版】
  4. 选择排序法之Java实现
  5. 【转】HDC,CDC,CWindowDC,CClientDC,CPaintDC等等
  6. myeclipse中hibernate出错
  7. 重新安装NVIDIA显卡驱动
  8. Codeforces #662C Binary Table
  9. 第六次作业-----抽奖系统
  10. AutoResetEvent类的使用