psutil是Python中广泛使用的开源项目,其提供了非常多的便利函数来获取操作系统的信息。

此外,还提供了许多命令行工具提供的功能,如ps,top,kill.free,iostat,iotop,pidof,pmap等等。

1. CPU

1.1 获取逻辑CPU和物理CPU个数。

1.2 查看CPU的利用率

percpu参数获取每个cpu的利用率,默认获取整体cpu利用率。

interval:获取interval时间范围内的cpu利用率。

1.3 以命名元组的形式返回cpu的时间花费

也可以指定percpu参数获取每一个cpu的统计时间

1.4 返回cpu耗费时间的比例

1.5 已命名元组的形式,返回cpu的统计信息,包括上下文切换、中断,软中断及系统调用次数

2. 内存

查看内存使用情况

这里有一个2进制转换函数

def byte2human(n):
symbols = ('K','M','G','T')
prefix = {}
for i,s in enumerate(symbols):
prefix[s] = 1 << (i+1) * 10
for s in reversed(symbols):
if n >= prefix[s]:
value = float(n) / prefix[s]
return '%.1f%s' % (value, s)
return "%sB" % n
  查看swap使用情况

3. 磁盘

返回已挂载的磁盘

查看磁盘使用情况

查看磁盘IO的统计信息,包括读的次数,写的次数,省略了解析/proc/diskstats

网络情况

返回包括收发字节数,收发包情况,出错情况与删包情况,与解析/proc/net/dev一样

查看每个网络连接的详细情况

查看网卡配置信息

查看网卡的详细信息,包括是否启动,通信类型,传输速度与mtu

4. 其它

查看登录用户

查看启动时间

5. psutil的进程管理

Process对进程类进行了封装,可以该类的方法获取进程的详细信息,或给进程发送信号。

pids以列表形式返回正在运行的进程

pid_exists判断给定的pid是否存在

process_iter迭代当前正在运行的进程

综合案列:

需求:收集系统的统计信息,并通过邮件发给管理员

monitor.py

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from __future__ import unicode_literals
import os
import socket
from datetime import datetime import jinja2
import yagmail
import psutil EMAIL_USER = 'scott@163.com'
EMAIL_PASSWORD = '123456'
RECIPIENTS = ['me@qq.com'] def render(tpl_path, **kwargs):
path, filename = os.path.split(tpl_path)
return jinja2.Environment(
loader=jinja2.FileSystemLoader(path or './')
).get_template(filename).render(**kwargs) def bytes2human(n):
symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
prefix = {}
for i, s in enumerate(symbols):
prefix[s] = 1 << (i + 1) * 10
for s in reversed(symbols):
if n >= prefix[s]:
value = float(n) / prefix[s]
return '%.1f%s' % (value, s)
return "%sB" % n def get_cpu_info():
cpu_count = psutil.cpu_count()
cpu_percent = psutil.cpu_percent(interval=1)
return dict(cpu_count=cpu_count, cpu_percent=cpu_percent) def get_memory_info():
virtual_mem = psutil.virtual_memory() mem_total = bytes2human(virtual_mem.total)
mem_percent = virtual_mem.percent
mem_free = bytes2human(
virtual_mem.free +
virtual_mem.buffers +
virtual_mem.cached)
mem_used = bytes2human(virtual_mem.total * virtual_mem.percent) return dict(mem_total=mem_total, mem_percent=mem_percent,
mem_free=mem_free, mem_used=mem_used) def get_disk_info():
disk_usage = psutil.disk_usage('/') disk_total = bytes2human(disk_usage.total)
disk_percent = disk_usage.percent
disk_free = bytes2human(disk_usage.free)
disk_used = bytes2human(disk_usage.used) return dict(disk_total=disk_total, disk_percent=disk_percent,
disk_free=disk_free, disk_used=disk_used) def get_boot_info():
boot_time = datetime.fromtimestamp(
psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
return dict(boot_time=boot_time) def collect_monitor_data():
data = {}
data.update(get_boot_info())
data.update(get_cpu_info())
data.update(get_memory_info())
data.update(get_disk_info())
return data def main(): hostname = socket.gethostname()
data = collect_monitor_data()
data.update(dict(hostname=hostname)) content = render('monitor.html', **data) with yagmail.SMTP(user=EMAIL_USER, password=EMAIL_PASSWORD,
host='smtp.163.com', port=465) as yag:
for recipient in RECIPIENTS:
yag.send(
recipient,
"监控信息",
content) if __name__ == '__main__':
main()

  monitor.html

<html>
<head><title>监控信息</title>
<body>
<table border="1">
<tr><td>服务器名称</td><td>{{hostname}}</td></tr>
<tr><td>开机时间</td><td>{{boot_time}}</td></tr> <tr><td>cpu个数</td><td>{{cpu_count}}</td></tr>
<tr><td>cpu利用率</td><td>{{cpu_percent}}</td></tr> <tr><td>内存总量</td><td>{{mem_percent}}</td></tr>
<tr><td>内存利用率</td><td>{{mem_total}}</td></tr>
<tr><td>内存已用空间</td><td>{{mem_used}}</td></tr>
<tr><td>内存可用空间</td><td>{{mem_free}}</td></tr> <tr><td>磁盘空间总量</td><td>{{disk_total}}</td></tr>
<tr><td>磁盘空间利用率</td><td>{{disk_percent}}</td></tr>
<tr><td>磁盘已用空间</td><td>{{disk_used}}</td></tr>
<tr><td>磁盘可用空间</td><td>{{disk_free}}</td></tr>
</table>
</body>
</html>

  运行monitor.py,收到邮件

psutil的使用的更多相关文章

  1. psutil 模块

    psutil.pids()查看单个进程p = psutil.Process(2423) p.name()   #进程名p.exe()    #进程的bin路径p.cwd()    #进程的工作目录绝对 ...

  2. python之系统性能信息模块psutil

    系统性能信息模块psutil 跨平台库 轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息. 主要用于系统监控,分析和限制系统资源及进程的管理 实现同等命令行工具提供的功能( ...

  3. psutil一个基于python的跨平台系统信息跟踪模块

    受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...

  4. 在ubuntu中安装psutil

    环境:ubuntu 16.04 LTS + python 2.7/3.5共存 + psutil 4.3.0 1.sudo apt-get install python3-dev # 先把python3 ...

  5. 在windows 10中使用pip安装psutil 4.3.0

    环境版本:windows + python 2.7/3.5共存 使用的python是使用exe安装的,默认已经有pip并确保PATH设置正确,默认安装psutil 4.3.0 1:使用cmd安装2.7 ...

  6. 初探psutil

    系统性能信息模块psutil 1,psutil简介 psutil是一个跨平台能够轻松获取系统的进程和系统利用率,主要应用在系统监控,分析和限制系统资源以及进程管理.它实现了很多系统管理的命令,如ps, ...

  7. psutil 是因为该包能提升 memory_profiler 的性能

    python 性能分析入门指南 一点号数据玩家昨天 限时干货下载:添加微信公众号"数据玩家「fbigdata」" 回复[7]免费获取[完整数据分析资料!(包括SPSS.SAS.SQ ...

  8. Windows 2003上 SaltStack/Salt 和 psutil 可能存在的问题及解决

    今天把salt安装在windows 2003上,发现无法启动,随之而来的是一个有一个的坑,让我们一起逐个排查. 问题一(salt无法启动) salt无法启动,错误结果如图:

  9. 安装 python psutil 包

    yum install python-pip 下载 psutil https://pypi.python.org/pypi?:action=display&name=psutil#downlo ...

  10. 15.python笔记之psutil模块

    一.psutil模块 1. psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等) ...

随机推荐

  1. [技术选型] SSH/SSI框架替代品

    1.Nutz 简介:http://blog.csdn.net/u012373523/article/details/16993859 官网:http://www.nutzam.com/ 2.

  2. 关于GO语言遇到illegal UTF-8 encoding 随手记录

    在使用汉字的时候会报错 解决方案 editpad++ 修改编码为UTF-8 保存就可以了~bingo

  3. 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查

    第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...

  4. Java并发编程笔记—摘抄—基础知识

    什么是线程安全 当多个线程访问某个类时,不管运行环境采用何种调度方式或者这些线程如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的. 竞态 ...

  5. svn -- svn数据仓库

    在svn中我们的项目,不能称之为项目或文件夹,而是称之为“仓库” 仓库的建立步骤: 1.创建代码仓库 l 在任意盘符下建立文件夹(D:\svn\myApp\)做为我们的版本库根目录,如我们需要建立一个 ...

  6. Eclipse中创建Maven项目失败

    Eclipse中创建Maven项目报错:Unable to create project from archetype org.apache.maven.archetypes:maven-archet ...

  7. ios中layer动画和UIView动画代码总结

    kCATransitionFade淡出  kCATransitionMoveIn覆盖原图  kCATransitionPush推出  kCATransitionReveal底部显出来    pageC ...

  8. CentOS英文提示修改为中文提示的方法

    1.安装中文支持包:yum -y groupinstall chinese-support 2.修改文件/etc/sysconfig/i18n如下: LANG="zh_CN.UTF-8″ S ...

  9. win用VNC远程Ubuntu教程

    转载:https://blog.csdn.net/jiangchao3392/article/details/73251175 1.安装Xrdp Windows远程桌面使用的是RDP协议,所以ubun ...

  10. 一款纯HTML+CSS+JS富文本编辑器-handyeditor

    官网:http://he.catfish-cms.com/ 修改版本(修改一些BUG和图片上传服务器 点击下载: handyeditor富文本编辑器.zip): 图片上传接口上传类型: Content ...