23_python笔记-psutil、mail模块
文章目录知识点1 psutil介绍示例1:top 监控系统性能 (类似 任务管理器)示例2:运维做什么?保证服务7*24小时正常运行示例3:fdisk -l 查看磁盘分区示例4:iostat查看磁盘读写情况示例5:uptime top的第1行输出示例6:dstat 监控cpu、磁盘、网络情况示例7:ethtool ens33 查看网卡状态、型号 比如怎样计算网卡流量知识点2 安装示例知识点3 ps
·
博客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 ~]# uptime
10: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 ens33
Speed: 1000Mb/s # 注:网卡传播速度 千兆网卡 支撑1000M小b
Link 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 + cached
percent:使用率: percent = (total - available) / total * 100
used:使用的内存: 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 -m
total 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),ipv6
type:SOCK_STREAM(tcp)、udp
laddr:本地ip地址
raddr
status
pid
·psutil.net_if_addrs():以字典的形式返回网卡的配置信息,包括IP地址和mac地址、子网掩码和广播地址。
·psutil.net_if_stats():返回网卡的详细信息,包括是否启动、通信类型、传输速度与mtu
mtu:最大传输单元
·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: cp
this 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
更多推荐
已为社区贡献1条内容
所有评论(0)