Python 版本说明
Python 是由 Guido van Rossum 开发的、可免费获得的、非常高级的解释型语言。其语法简单易懂,而其面向对象的语义功能强大(但又灵活)。Python 可以广泛使用并具有高度的可移植性。本文 Linux 服务器是 Ubuntu 12.10, Python 版本 是 2.7 。如果是 Python 3.0 版本的语法上有一定的出入。另外这里笔者所说的 Python 是 CPython,CPython 是用 C 语言实现的 Python 解释器,也是官方的并且是最广泛使用的 Python 解释器。除了 CPython 以外,还有用 Java 实现的 Jython 和用.NET 实现的 IronPython,使 Python 方便地和 Java 程序、.NET 程序集成。另外还有一些实验性的 Python 解释器比如 PyPy。CPython 是使用字节码的解释器,任何程序源代码在执行之前先要编译成字节码。它还有和几种其它语言(包括 C 语言)交互的外部函数接口。
工作原理:基于/proc 文件系统
Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做“/proc”),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数)。与其他文件系统不同,/proc 存在于内存而不是硬盘中。proc 文件系统提供的信息如下:
- 进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的进程 ID,可以找到 cmdline、mem、root、stat、statm,以及 status。某些信息只有超级用户可见,例如进程根目录。每一个单独含有现有进程信息的进程有一些可用的专门链接,系统中的任何一个进程都有一个单独的自链接指向进程信息,其用处就是从进程中获取命令行信息。
- 系统信息:如果需要了解整个系统信息中也可以从/proc/stat 中获得,其中包括 CPU 占用情况、磁盘空间、内存对换、中断等。
- CPU 信息:利用/proc/CPUinfo 文件可以获得中央处理器的当前准确信息。
- 负载信息:/proc/loadavg 文件包含系统负载信息。
- 系统内存信息:/proc/meminfo 文件包含系统内存的详细信息,其中显示物理内存的数量、可用交换空间的数量,以及空闲内存的数量等。
表 1 是 /proc 目录中的主要文件的说明:
表 1 /proc 目录中的主要文件的说明
文件或目录名称 |
描 述 |
---|---|
apm |
高级电源管理信息 |
cmdline |
这个文件给出了内核启动的命令行 |
CPU info |
中央处理器信息 |
devices |
可以用到的设备(块设备/字符设备) |
dma |
显示当前使用的 DMA 通道 |
filesystems |
核心配置的文件系统 |
ioports |
当前使用的 I/O 端口 |
interrupts |
这个文件的每一行都有一个保留的中断 |
kcore |
系统物理内存映像 |
kmsg |
核心输出的消息,被送到日志文件 |
mdstat |
这个文件包含了由 md 设备驱动程序控制的 RAID 设备信息 |
loadavg |
系统平均负载均衡 |
meminfo |
存储器使用信息,包括物理内存和交换内存 |
modules |
这个文件给出可加载内核模块的信息。lsmod 程序用这些信息显示有关模块的名称,大小,使用数目方面的信息 |
net |
网络协议状态信息 |
partitions |
系统识别的分区表 |
pci |
pci 设备信息 |
scsi |
scsi 设备信息 |
self |
到查看/proc 程序进程目录的符号连接 |
stat |
这个文件包含的信息有 CPU 利用率,磁盘,内存页,内存对换,全部中断,接触开关以及赏赐自举时间 |
swaps |
显示的是交换分区的使用情况 |
uptime |
这个文件给出自从上次系统自举以来的秒数,以及其中有多少秒处于空闲 |
version |
这个文件只有一行内容,说明正在运行的内核版本。可以用标准的编程方法进行分析获得所需的系统信息 |
下面本文的几个例子都是使用
Python 脚本
读取
/proc 目录中的主要文件来实现实现对 Linux 服务器的监控的 。
使用 Python 脚本实现对 Linux 服务器的监控
对于 CPU(中央处理器)监测
脚本 1 名称 CPU1.py,作用获取 CPU 的信息。
清单 1.获取 CPU 的信息
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 |
#!/usr/bin/env Python from __future__ import print_function from collections import OrderedDict import pprint def CPUinfo(): ''' Return the information in /proc/CPUinfo as a dictionary in the following format: CPU_info['proc0']={...} CPU_info['proc1']={...} ''' CPUinfo=OrderedDict() procinfo=OrderedDict() nprocs = 0 with open('/proc/CPUinfo') as f: for line in f: if not line.strip(): # end of one processor CPUinfo['proc%s' % nprocs] = procinfo nprocs=nprocs+1 # Reset procinfo=OrderedDict() else: if len(line.split(':')) == 2: procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip() else: procinfo[line.split(':')[0].strip()] = '' return CPUinfo if __name__=='__main__': CPUinfo = CPUinfo() for processor in CPUinfo.keys(): print(CPUinfo[processor]['model name']) |
简单说明一下清单 1,读取/proc/CPUinfo 中的信息,返回 list,每核心一个 dict。其中 list 是一个使用方括号括起来的有序元素集合。List 可以作为以 0 下标开始的数组。Dict 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系。OrderedDict 是一个字典子类,可以记住其内容增加的顺序。常规 dict 并不跟踪插入顺序,迭代处理时会根据键在散列表中存储的顺序来生成值。在 OrderedDict 中则相反,它会记住元素插入的顺序,并在创建迭代器时使用这个顺序。
可以使用 Python 命令运行脚本 CPU1.py 结果见图 1
1 2 |
# Python CPU1.py Intel(R) Celeron(R) CPU E3200 @ 2.40GHz |
图 1.运行清单 1
也可以使用 chmod 命令添加权限收直接运行 CPU1.py
1 2 |
#chmod +x CPU1.py # ./CPU1.py |
对于系统负载监测
脚本 2 名称 CPU2.py,作用获取系统的负载信息
清单 2 获取系统的负载信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/env Python import os def load_stat(): loadavg = {} f = open("/proc/loadavg") ڄ可移植性。本文 Linux 服务器是 Ubuntu 12.10, Python 版本 是 2.7 。如果是 Python 3.0 版本的语法上有一定的出入。另外这里笔者所说的 Python 是 CPython,CPython 是用 C 语言实现的 Python 解释器,也是官方的并且是最广泛使用的 Python 解释器。除了 CPython 以外,还有用 Java 实现的 Jython 和用.NET 实现的 IronPython,使 Python 方便地和 Java 程序、.NET 程序集成。另外还有一些实验性的 Python 解释器比如 PyPy。CPython 是使用字节码的解释器,任何程序源代码在执行之前先要编译成字节码。它还有和几种其它语言(包括 C 语言)交互的外部函数接口。
工作原理:基于/proc 文件系统Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做“/proc”),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数)。与其他文件系统不同,/proc 存在于内存而不是硬盘中。proc 文件系统提供的信息如下:
表 1 是 /proc 目录中的主要文件的说明: 表 1 /proc 目录中的主要文件的说明
使用 Python 脚本实现对 Linux 服务器的监控对于 CPU(中央处理器)监测脚本 1 名称 CPU1.py,作用获取 CPU 的信息。 清单 1.获取 CPU 的信息
简单说明一下清单 1,读取/proc/CPUinfo 中的信息,返回 list,每核心一个 dict。其中 list 是一个使用方括号括起来的有序元素集合。List 可以作为以 0 下标开始的数组。Dict 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系。OrderedDict 是一个字典子类,可以记住其内容增加的顺序。常规 dict 并不跟踪插入顺序,迭代处理时会根据键在散列表中存储的顺序来生成值。在 OrderedDict 中则相反,它会记住元素插入的顺序,并在创建迭代器时使用这个顺序。 可以使用 Python 命令运行脚本 CPU1.py 结果见图 1
图 1.运行清单 1也可以使用 chmod 命令添加权限收直接运行 CPU1.py
对于系统负载监测脚本 2 名称 CPU2.py,作用获取系统的负载信息 清单 2 获取系统的负载信息
|