1. 安装psutil
psutil用于在python中检索有关正在运行的进程和系统利用率的信息
cmd下运行pip install psutil
2. 获取cpu信息
第一个cpu的逻辑数量,第二个是cpu的物理数量
查看cpu的完整信息
获取cpu使用率
获取内存信息,swap使用就用swap_memory方法
磁盘数据,磁盘利用率用disk_usage,io用disk_io_counters方法,默认disk_io_counters方法获取的是硬盘总的io数和读写信息,如果需要获取单个分区的io和读写信息加上"perdisk=True"参数。最后一个可以获取实时读取速度
获取网络信息,网络io和磁盘io使用方法差不多,主要使用net_io_counters方法,如果需要获取单个网卡的io信息,加上pernic=True参数。
查看系统全部进程
类似于linux的ps
查看单个进程
3. 练习一:远程监控
服务器端
#远程监控服务器 server
import socket
import time
import threading
s=socket.socket()
s.bind(('0.0.0.0',2345))
s.listen(8)
with open("blacklist.txt") as f:
blacklist=f.read()
def tcplink(sock,addr):
print(f"客户端{addr}已接入")
print(f"{'time':16s}{'tcpu':8s}{'tmem':8s}{'tdisk':8s}thost")
while 1:
data=sock.recv(2048)
result=data.decode()
print(result+"\t"+addr[0])
sock.send(blacklist.encode())
# blacklist=[i.strip() for i in blacklist]
time.sleep(1)
while 1:
sock,addr=s.accept()
t=threading.Thread(target=tcplink,args=(sock,addr))
t.start()
客户端
#远程监控客户端 agent
import psutil
import socket
import time
import sys
sip=sys.argv[1]
sport=int(sys.argv[2])
s=socket.socket()
while 1:
try:
s.connect((sip,sport))
break
except:
time.sleep(10)
while 1:
c=psutil.cpu_percent(interval=1)
m=psutil.virtual_memory().percent
d=psutil.disk_usage("/").percent
t=time.strftime("%H:%M:%S")
result=f"{t}\t{c}\t{m}\t{d}"
s.send(result.encode())
blacklist=s.recv(1024).decode()
pids=psutil.pids()
for pid in pids:
try:
p=psutil.Process(pid)
if p.name() in blacklist:
p.terminate()
except:
pass
在客户端没有启动时,服务器端并不会报错,隔断时间会重新连接一次