文章目录

  • 知识点1 psutil介绍
    • 示例1:top 监控系统性能 (类似 任务管理器)
    • 示例2:运维做什么?保证服务7*24小时正常运行
    • 示例3:fdisk -l 查看磁盘分区
    • 示例4:iostat查看磁盘读写情况
    • 示例5:uptime top的第1行输出
    • 示例6:dstat 监控cpu、磁盘、网络情况
    • 示例7:ethtool ens33 查看网卡状态、型号 比如怎样计算网卡流量
  • 知识点2 安装
    • 示例
  • 知识点3 psutil
    • 1、cpu(linux命令:top)
    • 2、memory(linux命令:free)
    • 3、disk(linux命令:iostat,df)
    • 4、Network(linux命令:ifconfig、who、uptime,netstat)
    • 5、进程管理(linux命令:ps、kill)
  • 知识点4 mail模块
    • 示例:把内容识别成网页传送

博客cPen_web

知识点1 psutil介绍

#应用于系统监控
psutil介绍·process and system utilities               # 注:utilities工具  进程和系统工具·能够轻松的实现获取系统运行的进程和系统利用率(CPU、内存、磁盘、网络等)信息,主要应用于系统监控。·实现了同等命令命令行实现的功能:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等·跨平台:linux、windows、OS X、FreeBSD和Sun Solaris等·主要功能包含:CPU、磁盘、内存、网络、进程
# 注:ps        看进程
# 注:top  监控系统性能 (类似 任务管理器)
# 注:lsof 监控内存打开的文件数 list open file
# 注:netstat  网络连接状态
# 注:ifconfig 网卡信息
# 注:who  谁连接上来
# 注:df       看磁盘 (挂载/使用率)
# 注:磁盘文件 /dev
# 注:kill 进程 杀死或重新加载
# 注:free 看内存的
# 注:nice 看优先级
# 注:iostat   查看磁盘读写情况
# 注:iostat -x 1 查看其他
# 注:uptime       top的第1行输出
# 注:pidof    看进程pid号
# 注:taskset  看当前任务   对当前任务进行一些设置
# 注:pmap 看进程的内存# 注:CPU的使用率超过50% 考虑扩容

示例1:top 监控系统性能 (类似 任务管理器)

[root@cPen_A ~]# top
#-------------------------------------------------------------------------------------------
top - 09:49:55 up  7:57,  8 users,  load average: 0.01, 0.02, 0.05
# 平均负载  1分钟内的平均使用率  5分钟内    15分钟内
#-------------------------------------------------------------------------------------------
Tasks: 127 total,   1 running, 126 sleeping,   0 stopped,   0 zombie
# 注:任务   zombie僵尸进程状态
#-------------------------------------------------------------------------------------------
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
# 注:看当前cpu当前状态   us用户空间  sy系统空间
# 注:id空闲状态(1s内99.8%属于空闲状态)、ni使用率(越高表示系统相当繁忙)
# 注:ni高时 考虑扩容 或者代码问题陷入循环
# 注:按1显示每1个CPU的使用率 (说的是它的逻辑CPU)
#-------------------------------------------------------------------------------------------
KiB Mem :  3861308 total,  3283352 free,   223188 used,   354768 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  3398432 avail Mem
# 注:Mem 内存
# 注:它的内存 swap 交换分区 在磁盘上面开辟1片空间出来供内存使用
# 注:buff/cache 缓存
#-------------------------------------------------------------------------------------------PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                               5258 root      20   0       0      0      0 S   0.3  0.0   0:00.12 kworker/1:0                                                           1 root      20   0  125524   4040   2600 S   0.0  0.1   0:02.30 systemd
# 注:按占用多少CPU去排
#-------------------------------------------------------------------------------------------
# 注:物理CPU是实实在在镶嵌在主板上的
# 注:逻辑CPU 真正做事情的 (类似1个CPU上面有2个核/1个CPU上面有2组芯片)
#-------------------------------------------------------------------------------------------

示例2:运维做什么?保证服务7*24小时正常运行

1、监控到位
2、根据监控做处理/扩容
3、自动化 脚本

示例3:fdisk -l 查看磁盘分区

[root@cPen_A dev]# fdisk -l                     # 注:查看磁盘分区
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes[root@cPen_A ~]# cd /dev
[root@cPen_A dev]# ls sda
sda   sda1  sda2
[root@cPen_A dev]# ls -al sda
brw-rw---- 1 root disk 8, 0 11月 24 19:32 sda        # 注:块设备文件
# 注:不能直接写入,需要把它挂到某个目录下,去目录的操作就是对磁盘分区的操作
[root@cPen_A dev]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
/dev/sda1                1038336  153512   884824   15% /boot   # 注:sda1盘 挂到/boot目录下
# 注:磁盘满了怎么解决?答:盘可以加 就扩容盘 ,盘不可以加 就扩容机器

示例4:iostat查看磁盘读写情况

#iostat -x 1 展示它的其他信息        重点关注util (读写状态)
[root@cPen_C yum.repos.d]# yum install sysstat
[root@cPen_A ~]# iostat -x 1       # 注:-x 展示他的其他信息 ,1 1s钟
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

示例5:uptime top的第1行输出

[root@cPen_A ~]# uptime10:49:23 up  8:56,  6 users,  load average: 0.00, 0.01, 0.05

示例6:dstat 监控cpu、磁盘、网络情况

[root@cPen_A ~]# yum install dstat
[root@cPen_A ~]# dstat     # 注:监控cpu、磁盘、网络
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 0   0 100   0   0   0|  10k 3373B|   0     0 |   0     0 |  62    81

示例7:ethtool ens33 查看网卡状态、型号 比如怎样计算网卡流量

[root@cPen_C yum.repos.d]# ethtool ens33Speed: 1000Mb/s             # 注:网卡传播速度   千兆网卡    支撑1000M小bLink detected: yes             # 注:网卡是否连接
#注:1个字节8位

知识点2 安装

安装·源码安装:git clone https://github.com/giampaolo/psutil.git
cd psutil
python3 setup.py install·先安装相关库:yum install python3-devel,(用yum list |grep python|grep dev  找到包名), pip3 install psutil·导入使用模块: import psutil
>>> import psutil

示例

[root@cPen_B ~]# yum list |grep python |grep dev
python36-devel.x86_64                                3.6.8-2.module_el8.1.0+245+c39af44f              @AppStream
[root@cPen_B ~]# yum install python36-devel.x86_64
[root@cPen_B ~]# pip3 install psutil#注:网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-ens33

知识点3 psutil

1、cpu(linux命令:top)

 ·psutil.cpu_count(,[logical]):默认返回逻辑CPU的个数,当设置logical的参数为False时,返回物理CPU的个数·psutil.cpu_percent(,[percpu],[interval]):返回CPU的利用率,percpu为True时显示所有物理核心的利用率,interval不为0时,则阻塞时显示interval执行的时间内的平均利用率·psutil.cpu_times(,[percpu]):以命名元组(namedtuple)的形式返回cpu的时间花费,percpu=True表示获取每个CPU的时间花费。user:执行用户进程的时间system:执行内核进程时间idle:闲置的时间iowait:等待io操作的时间irp:硬中断时间softirq:软中断时间·psutil.cpu_times_percent(,[percpu]):功能和cpu_times大致相同,返回耗时比例·psutil.cpu_stats(): 以命名元组的形式返回CPU的统计信息,包括上下文切换,中断,软中断和系统调用次数ctx_switches:上下文切换次数interrupts:中断次数soft_interrupts:软中断次数syscalls:系统调用次数,linux上始终为0·psutil.cpu_freq(): 返回cpu频率

示例1:返回CPU个数

>>> import psutil
>>> psutil.cpu_count()                 # 注:返回逻辑CPU个数
2
>>> psutil.cpu_count(logical=False)       # 注:返回物理CPU个数
2

示例2:CPU使用率 百分比利用率

>>> psutil.cpu_percent()
0.1

示例3:cpu_times

>>> psutil.cpu_times()      # 注:花费的时间占用总时间的百分比
scputimes(user=105.27, nice=0.1, system=81.87, idle=69229.05, iowait=11.17, irq=0.0, softirq=5.25, steal=0.0, guest=0.0, guest_nice=0.0)

示例4:返回每个核的利用率

>>> psutil.cpu_percent(percpu = True)
[0.1, 0.1]

2、memory(linux命令:free)

 ·virtual_memory():以命名元组的形式返回内存使用情况,单位为字节total:总物理内存available:可用内存,available ~free + buffers + cachedpercent:使用率: percent = (total - available) / total * 100used:使用的内存: used  =  total - free - buffers - cache
# 注:一般不用used 因为buffer和cache是缓存的,对于程序而言是可以使用的,对于内存而言是被分出去的
# 注:buffer和cache的区别 buffer块设备的读写缓存区 、cache系统的缓存区free:完全没用使用内存active:最近被访问的内存inactive:长时间未被访问的内存buffers:缓存cached:缓存slab:内核数据结构缓存的内存·swap_memory:以命名元组的形式返回swap/memory使用情况,包含swap中页的换入和换出

示例1:virtual_memory

>>> psutil.virtual_memory()
svmem(total=3953979392, available=3447025664, percent=12.8, used=249577472, free=3045027840, active=350208000, inactive=329723904, buffers=2162688, cached=657211392, shared=12365824, slab=117297152)
#注:算内存的时候,用available
#注:使用率 total - available[root@cPen_A ~]# free -mtotal        used        free      shared  buff/cache   available
Mem:           3770         231        2910          11         628        3294
Swap:          2047           0        2047

示例2:buffer、cache的缓存

  在Free命令中显示的buffer和cache,它们都是占用内存:buffer : 作为buffer cache的内存,是块设备的读写缓冲区,更靠近存储设备,或者直接就是disk的缓冲区。cache: 作为page cache的内存, 文件系统的cache,是memory的缓冲区如果 cache 的值很大,说明cache住的文件数很多。如果频繁访问到的文件都能被cache住,那么磁盘的读IO 必会非常小。

3、disk(linux命令:iostat,df)

 ·psutil.disk_io_counters([perdisk]):以命名元组的形式返回磁盘io统计信息(汇总的),包括读、写的次数,读、写的字节数等·psutil.disk_partitions():磁盘挂载分区信息device:分区mountpoint:挂载点fstype:文件系统格式(fat、ext4、 xfs)opts:挂载参数·disk_usage:磁盘使用情况,需要传入一个路径参数>>> psutil.disk_usage('/')
sdiskusage(total=250685575168, used=103938019328, free=134242258944, percent=43.6)·iostat   :  %util 数值越大越忙碌,到达了io瓶颈(安装包:yum install sysstat)

示例1:磁盘挂载分区信息 disk_partitions

>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/centos-root', mountpoint='/', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota'), sdiskpart(device='/dev/sda1', mountpoint='/boot', fstype='xfs', opts='rw,relatime,attr2,inode64,noquota')]

示例2:磁盘使用情况 disk_usage

>>> psutil.disk_usage("/")                    # 注:需要接挂载点
sdiskusage(total=18238930944, used=2300264448, free=15938666496, percent=12.6)

4、Network(linux命令:ifconfig、who、uptime,netstat)

 ·psutil.net_io_counters([pernic]):以命名元组的形式返回当前系统中每块网卡的网络io统计信息,包括收发字节数,收发包的数量、出错的情况和删包情况。当pernic为True时,则列出所有网卡的统计信息。lo :本地回环地址(127.0.0.1)·psutil.net_connections([kind]):以列表的形式返回每个网络连接的详细信息(namedtuple)fd:文件描述符family:地址簇,ipv4(AF_INET),ipv6type:SOCK_STREAM(tcp)、udpladdr:本地ip地址raddrstatuspid·psutil.net_if_addrs():以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。·psutil.net_if_stats():返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtumtu:最大传输单元·psutil.users():以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端·psutil.boot_time():以时间戳的形式返回系统的启动时间

示例1:psutil.users 以命名元组的方式返回当前登陆用户的信息,包括用户名,登陆时间,终端

>>> psutil.users()                      # 注:w、who命令
[suser(name='root', terminal='tty1', host='', started=1606217600.0, pid=708), suser(name='root', terminal='pts/0', host='192.168.0.42', started=1606361216.0, pid=5921), suser(name='root', terminal='pts/2', host='192.168.0.42', started=1606361216.0, pid=5942), suser(name='root', terminal='pts/6', host='192.168.0.42', started=1606354816.0, pid=5239), suser(name='root', terminal='pts/7', host='192.168.0.42', started=1606357120.0, pid=5312)]

示例2:net_if_addrs

>>> psutil.net_if_addrs()           # 注:lo本地回环地址 127.0.0.1
{'lo': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_PACKET: 17>, address='00:00:00:00:00:00', netmask=None, broadcast=None, ptp=None)], 'ens33': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.0.21', netmask='255.255.255.0', broadcast='192.168.0.255', ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 10>, address='fe80::22d8:5740:d6d7:d1ff%ens33', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_PACKET: 17>, address='00:0c:29:d1:80:fa', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}

5、进程管理(linux命令:ps、kill)

 ·psutil.pids():以列表的形式返回当前正在运行的进程·psutil.pid_exists(1):判断给点定的pid是否存在·psutil.Process(1):对进程进行封装,可以使用该类的方法获取进行的详细信息,或者给进程发送信号·psutil.process_iter():迭代当前正在运行的进程,返回的是每个进程的Process对象name:获取进程的名称cmdline:获取启动进程的命令行参数create_time:获取进程的创建时间uids:进程uid信息num_threads:开启的线程数exe:进程工作的绝对路径kill:发送SIGKILL信号结束进程

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

>>> psutil.process_iter()
<generator object process_iter at 0x7f56eb912888>
>>> p = psutil.process_iter()
>>> next(p)
psutil.Process(pid=1, name='systemd', status='sleeping', started='01:52:52')

知识点4 mail模块

#mail模块
#1、邮件报警
#2、发送报表#邮件协议
#1、smtp (simple mail transfer protocol) 简单邮件传输协议,主要用来发送文件  默认端口 25号
#2、pop3  主要用来接收邮件   默认端口 110    客户端的操作不会反馈到服务器端
#3、imap  主要用来接收邮件   默认端口 143    客户端的操作会反馈到服务器端#注:……协议,就是规范
#注:通过协议实现的叫做服务### 163邮箱获取授权码
# ICBHC………………………………
# RTACS………………………………
#Python收发邮件 smtplib ,poplib 和imaplab
#Python中涉及到发送邮件的两个模块:stmplib(发送模块) 和 email(用来构造邮件内容)
from smtplib import SMTP     # 导入smtplib模块的SMTP类
s = SMTP("smtp.163.com")    # 注:使用163邮箱去发送
s.login("cp1533431376@163.com","RTACS………………………………")    # 登录
tolist = ["fanfan343292019@163.com"]
msg = """\
From: cp1533431376@163.com
TO: fanfan343292019@163.com
Subject: cpthis is cp test
"""s.sendmail("cp1533431376@163.com",tolist, msg)
# 2、email模块
#email 模块三个常用模块:text, image, mutilpart
from smtplib import SMTP
from email.mime.text import MIMEText#第三方smtp服务设置
mail_host = "smtp.163.com"
mail_user = "cp1533431376@163.com"
mail_pass = "RTACS………………………………"recv = "fanfan343292019@163.com"#构造邮件内容
#正文内容、正文内容类型、正文内容编码
message = MIMEText("HELLO WORLD CP", "plain", "utf-8")  # plain是普通的文本message["From"] = mail_user # 把对象像字典一样传参
message["To"] = recv
message["Subject"] = "cp-email"s = SMTP("smtp.163.com")    # 注:使用163邮箱去发送
s.login("cp1533431376@163.com","RTACS………………………………")    # 登录
s.sendmail(mail_user,recv,message.as_string())    # 文件内容需要转换成字符型

示例:把内容识别成网页传送

#把内容识别成网页传送
#构造邮件内容
#正文内容、正文内容类型、正文内容编码
# message = MIMEText("HELLO WORLD CP", "plain", "utf-8")  # plain是普通的文本
html_msg = " <p>python邮件测试。。。</p><p><a href='https://www.baidu.com'>点击进入百度</a></p>"
message = MIMEText(html_msg,'html','utf-8')message["From"] = mail_user # 把对象像字典一样传参
message["To"] = recv
message["Subject"] = "cp-email"s = SMTP("smtp.163.com")    # 注:使用163邮箱去发送
s.login("cp1533431376@163.com","RTACS………………………………")    # 登录
s.sendmail(mail_user,recv,message.as_string())    # 文件内容转换成字符型

示例:怎样看服务的默认端口? /etc/services

[root@cPen_A ~]# cat /etc/services |grep smtp
smtp            25/tcp          mail
smtp            25/udp          mail

23_python笔记-psutil、mail模块相关推荐

  1. 好程序员web前端分享Nodejs学习笔记之Stream模块

    好程序员web前端分享Nodejs学习笔记之Stream模块 一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流 ...

  2. python笔记之Cmd模块

    python笔记之Cmd模块 Cmd类型提供了一个创建命令行解析器的框架,默认情况下,它使用readline来进行交互式操作.命令行编辑和命令完成.使用cmd创建的命令行解释器循环读取输入的所有行并且 ...

  3. python常用模块用法_python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  4. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

  5. python学习笔记4(模块

    python学习笔记4(模块) 一.模块 1.1 import语句 1.2 __name__属性 1.3 dir()函数 1.4 包 2.1 导入特定模块: 二.输入与输出 2.1 format使用 ...

  6. STM32F407学习笔记——MG90S舵机模块(基本控制)

    STM32F407学习笔记--MG90S舵机模块(基本控制) 一.基本原理: 通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms). 旋转 ...

  7. [推荐]OpenERP开发笔记(5) -- 自定义模块开发之一

    http://www.jeffzhang.cn/OpenERP-DEV-Notes-Custom-Module-Development1/ OpenERP开发笔记(5) -- 自定义模块开发之一 发表 ...

  8. Python标准库笔记(9) — functools模块

    functools 作用于函数的函数 functools 模块提供用于调整或扩展函数和其他可调用对象的工具,而无需完全重写它们. 装饰器 partial 类是 functools 模块提供的主要工具, ...

  9. E203 蜂鸟 RISC-V处理器代码阅读笔记 之指令预取模块2(指令分支预测) e203_ifu_litebpu.v.v

    这个文章记录了我学习RISC-V蜂鸟E203处理器的学习历程 这是我正式阅读代码学习的第3个源代码文件 针对代码的学习,我结合自己的理解对每个module的接口,以及内部关键信号做了详细的注释说明 原 ...

最新文章

  1. 1小时学会:最简单的iOS直播推流(十一)spspps和AudioSpecificConfig介绍(完结)
  2. 宿主机windows Xp部署virtualBox虚拟机并在其上安装linux ubuntu操作系统
  3. 科大星云诗社动态20210503
  4. Hibernate缓存和ehcache
  5. Activiti之H2
  6. 史上最快的Transformer!新模型达成最低时间复杂度
  7. php对象方法调用静态方法,php面向对象之静态方法使用
  8. java中--《_Java中的IO流(五)
  9. 大数据技术落地需要注意哪些问题
  10. 利用vb进行autocad图形格式的批量自动转换.pdf_ReaConverter Lite图像批量转换器下载V7.607官方版...
  11. 注册测绘师考试复习视频资料
  12. SIMULATE ANNEAL
  13. GIS(地理信息系统/地理信息科学)怎么评职称?
  14. Unity 回合制战斗系统(中级篇)-血条和伤害数值
  15. 三子棋?玩我自己的!
  16. VS2015程序出现缺少dll文件解决方法
  17. CC00047.bdpositions——|Hadoop实时数仓.V27|——|项目.v27|需求三:数据处理增量统计广告.V1|——|需求分析|
  18. 拨号服务器应用场景有哪些?
  19. C语言中的字符串与字符串函数
  20. 声光控延时开关设计原理

热门文章

  1. wamp下配置php文件,wamp开发环境快速搭建详细步骤
  2. [重拾]深入理解gulp自动化
  3. 成功并不像你想象的那么难
  4. 智能手机之双卡双待(续)
  5. 完全在GNU/Linux下工作
  6. MobileNetV1《MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications》
  7. 使用Bootstrap搭界面案例以及图标的运用
  8. Why extends is evil
  9. windows 通过cmd命令(netsh wlan命令)连接wifi
  10. finallshell用密钥对链接阿里云服务器