1.安装psutil
psutil用于在python中检索有关正在运行的进程和系统利用率的信息cmd下运行pip install psutil
2.获取CPU信息
一个是物理数量。一个是逻辑数量,其中logical的值默认为True。
psutil获取系统CPU使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu;interval指定的是计算cpu使用率的时间间隔,percpu则指定是选择总的使用率还是每个cpu的使用率;
获取内存信息:使用psutil.virtual_memory() 获取系统内存的使用情况;
使用 psutil.swap_memory()获取系统交换内存的统计信息;
使用 psutil.disk_partitions() 获取磁盘分区的信息;使用psutil.disk_usage('/')获取磁盘的使用情况;使用psutil.disk_io_counters() 获取磁盘的IO统计信息(读写速度等);
获取网络信息:
使用psutil.net_io_counters()获取总的网络IO信息使用 psutil.net_io_counters(pernic=True)获取网卡的IO信息
使用 psutil.net_if_addrs() 获取网络接口信息
使用psutil.net_if_stats()获取网络接口状态信息
类似于linux的ps:psutil.test()
查看系统全部进程:psutil.pids()
查看单个进程
3.监控设计
#远程监控服务器
import socket
import time
import threading
s=socket.socket()
s.bind(("0.0.0.0",2345))
s.listen(8)
def tcplink(sock,addr):
print(f"客户端{addr}已接入")
print(f"{'time':16s}{'cpu':8s}{'mem':8s}{'host':8s}")
while 1:
data=sock.recv(2048)
result=data.decode()
print(result+"\t"+addr[0])
with open("blacklist.txt") as f:
blacklist=f.read()
sock.send(blacklist.encode())
time.sleep(1)
while 1:
sock,addr=s.accept()
t=threading.Thread(target=tcplink,args=(sock,addr))
t.start()
#远程监控客户端
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
执行结果如下:
在客户端没有启动时,服务器端并不会报错,隔断时间会重新连接一次。
然后执行客户端程序:
服务器端程序
……