为什么需要监控系统进程
电脑跑着跑着变卡,浏览器还没开几个标签页,内存就快满了。这种情况很多人都遇到过,问题往往出在后台悄悄运行的某些程序上。这些程序可能是一个自动更新服务、一个崩溃后不断重启的脚本,或者某个占用大量CPU资源的恶意进程。这时候,如果能有个小工具实时盯着这些进程,一有异常就提醒你,就能省去不少排查时间。
Python 作为一门功能强大又上手容易的语言,很适合用来写这种轻量级的监控脚本。不需要复杂的界面,几行代码就能搞定。
使用 psutil 库获取进程信息
Python 自带的 os 或 subprocess 模块虽然也能执行系统命令查进程,但跨平台兼容性差,解析输出也麻烦。推荐使用第三方库 psutil,它封装好了各种系统调用,一行代码就能拿到进程名、PID、CPU 和内存占用等关键数据。
安装方式很简单:
pip install psutil列出当前所有进程
下面这段代码可以打印出系统中正在运行的前10个进程的基本信息:
import psutil
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):
try:
pinfo = proc.info
print(f"PID: {pinfo['pid']} | 名称: {pinfo['name']} | CPU: {pinfo['cpu_percent']}% | 内存: {pinfo['memory_info'].rss / 1024 / 1024:.2f} MB")
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass监控特定进程是否存在
比如你有个定时备份脚本叫 backup.py,希望它一直在后台跑。可以用下面的方法检查它是否还在运行:
import psutil
def is_process_running(name):
for proc in psutil.process_iter(['name']):
if proc.info['name'] == name:
return True
return False
# 检查 python 进程中是否有 backup.py
if not is_process_running('python.exe'):
print("备份程序可能已退出!")实际使用时可以根据进程命令行参数进一步判断,避免误判。
设置资源阈值告警
更实用的功能是当某个进程占用 CPU 超过80%持续5秒,就发出提示。这可以通过循环加延迟实现:
import psutil
import time
def monitor_high_cpu(threshold=80, duration=5):
high_cpu_pids = {}
while True:
time.sleep(1)
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent']):
try:
pid = proc.info['pid']
cpu = proc.info['cpu_percent']
if cpu > threshold:
if pid not in high_cpu_pids:
high_cpu_pids[pid] = time.time()
elif time.time() - high_cpu_pids[pid] > duration:
print(f"警告:进程 {proc.info['name']} (PID: {pid}) CPU 占用超过 {threshold}% 达 {duration} 秒!")
else:
if pid in high_cpu_pids:
del high_cpu_pids[pid]
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass这类脚本可以在下班前启动,第二天查看日志就知道夜里有没有异常进程捣乱。
扩展思路:把告警发到手机
光打印在屏幕上不够直观。结合邮件发送、企业微信机器人或 Telegram Bot,可以把告警消息推送到手机。例如用 smtplib 发邮件,或者调用钉钉的 Webhook 接口,几分钟就能接通。
再进一步,可以把监控数据写入 SQLite 或 MySQL,配合前端图表展示历史趋势,就成了简易版的服务器监控系统。
这些小脚本不追求高大上,关键是解决实际问题。哪怕只是每天定时记录一次最高内存占用的进程,积累下来也能发现很多隐藏的性能瓶颈。