psutil.cpu_percent() 首次调用返回0.0因无历史基准,需至少调用两次并间隔>0秒;多核默认返回平均值,单核需设percpu=true;内存监控应优先使用available而非free;disk_io_counters()在非root环境易因权限报错,可降级为disk_usage();process.memory_info().rss波动属正常,建议用滑动平均或uss判断真实占用。

psutil.cpu_percent() 为什么第一次调用总是返回 0.0
因为 psutil.cpu_percent() 是基于时间差计算的,首次调用时没有前一时刻基准值,只能返回 0.0。这不是 bug,是设计使然。
实操建议:
- 必须至少调用两次,且间隔 > 0 秒(比如
time.sleep(1)),第二次才开始有真实数值 - 如果想“立即拿到近似值”,可先调用一次丢弃结果,再 sleep 后正式采集
- 多核 CPU 下默认返回的是所有逻辑核心的平均使用率;要单核数据得用
psutil.cpu_percent(percpu=True) - 传参
interval=None会阻塞等待,不推荐在循环监控中使用,容易拖慢整个报表生成节奏
内存统计里 available 和 free 差太多,该信哪个
free 是完全未被使用的物理内存,而 available 是系统估算出的、当前可立即分配给新进程的内存(含可回收缓存)。监控时应优先看 available,它更贴近真实可用性。
常见错误现象:只看 free 值低就报警,结果发现服务完全正常——其实 available 还很充足。
实操建议:
- 从
psutil.virtual_memory()返回对象中取.available字段,单位是字节,记得除以 1024**2 转 MB - Linux 下
available值由内核估算,比free更保守也更实用;Windows/macOS 行为略有差异,但字段语义一致 - 不要自己用
total - used算“剩余”,used包含缓存,不能直接减
生成实时报表时 psutil.disk_io_counters() 报 PermissionError
在某些 Linux 发行版(如 CentOS 7 默认配置)或容器环境中,普通用户无权读取 /proc/diskstats,导致调用 psutil.disk_io_counters() 抛 PermissionError。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
使用场景:你不是 root,又想监控磁盘 I/O(比如读写速率、IOPS),但报表卡在这一步。
实操建议:
- 最轻量解法:加
perdisk=False参数(默认就是 False),避免枚举所有磁盘设备,有时能绕过权限检查 - 若必须按盘统计,且环境可控,可临时给 Python 进程加 capability:
sudo setcap cap_sys_admin+ep $(which python3)(仅限调试,生产慎用) - 更稳妥做法:捕获异常,降级为只采集
psutil.disk_usage('/')空间信息,不强求 I/O 数据 - Docker 容器中需加
--privileged或显式挂载/proc:/proc:ro,否则连基础磁盘信息都拿不到
用 psutil.Process() 查某个服务的内存占用,结果波动极大
因为 Process.memory_info().rss 返回的是进程当前驻留集大小(RSS),它包含共享库、mmap 映射等,且受 GC、内存归还策略影响,秒级波动很正常——尤其 Python 进程本身就有内存抖动。
性能影响提示:频繁调用 memory_info() 对高并发进程(如 uwsgi worker)可能引发轻微性能开销,但通常可忽略。
实操建议:
- 别盯着单次 RSS 值看,改用滑动窗口(比如最近 5 次平均)平滑噪声
- 若关注“实际独占内存”,可看
memory_info().uss(Unix Shared Size),但仅 Linux 支持,且需 psutil ≥ 5.9.0 - 查子进程时注意:默认不递归,要用
proc.children(recursive=True)手动展开,否则漏掉 gunicorn 的 worker 进程 - 进程已退出却还调用其方法?务必用
proc.is_running()先判断,否则抛NoSuchProcess
真正难的不是取数,而是区分哪些波动是正常内存管理行为,哪些是泄漏苗头——得结合增长趋势和业务请求量交叉判断,光靠单点数值没意义。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










