You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于psutil记录主/子进程资源:内存最大值与CPU/IO累积值的确认

确认psutil监控多进程资源的正确记录方式

嘿,你的思路完全在线!针对你提到的三个资源监控维度,我帮你确认并补充点细节:

1. 最大内存使用量:必须用 max(mem_usage, new_data)

psutil返回的内存数据(比如memory_info().rss)是当前时间点的瞬时值,而我们要的是进程生命周期内的峰值内存占用。所以每次轮询时,必须把新获取的数值和之前记录的最大值做比较,保留更大的那个——这样最终得到的才是该进程运行期间的真实内存峰值。

给你个简单的实现片段参考:

import psutil
import time

def track_process_max_memory(pid):
    max_rss = 0
    process = psutil.Process(pid)
    while process.is_running():
        try:
            current_rss = process.memory_info().rss  # 物理内存占用,单位字节
            max_rss = max(max_rss, current_rss)
            time.sleep(1)
        except psutil.NoSuchProcess:
            break
    return max_rss / (1024 * 1024)  # 转换为MB返回

这里用rss(Resident Set Size)是最常用的物理内存指标,如果你需要监控虚拟内存,可以换成vms,逻辑完全一致。

2. CPU时间:记录最后一组数据完全正确

psutil的cpu_times()返回的user(用户态时间)和system(内核态时间)都是累积计数器,从进程启动开始一直累加直到进程终止。所以进程结束前的最后一次读取值,就是该进程整个生命周期消耗的总CPU时间。不需要在轮询时累加,直接取最后一次的结果就好。

示例代码:

def get_process_total_cpu_time(pid):
    process = psutil.Process(pid)
    while process.is_running():
        time.sleep(1)
    try:
        cpu_stats = process.cpu_times()
        return cpu_stats.user + cpu_stats.system  # 总CPU时间,单位秒
    except psutil.NoSuchProcess:
        return 0.0

3. IO数据:同样只需记录最后一组数据

和CPU时间逻辑一致,psutil的io_counters()返回的read_bytes、write_bytes等指标也是累积值,统计的是从进程启动到当前的总IO字节数。所以进程结束时的最后一次读取,就是该进程全程的IO总量,不需要额外累加。

注意:部分系统(比如Windows)可能不支持进程级IO统计,调用io_counters()会抛出NotImplementedError,建议代码里加上异常处理:

def get_process_total_io(pid):
    process = psutil.Process(pid)
    while process.is_running():
        time.sleep(1)
    try:
        io_stats = process.io_counters()
        return {"read_mb": io_stats.read_bytes / (1024*1024), "write_mb": io_stats.write_bytes / (1024*1024)}
    except (psutil.NoSuchProcess, NotImplementedError):
        return {"read_mb": 0.0, "write_mb": 0.0}

另外补充:主进程的资源监控逻辑和子进程完全一致——内存要跟踪最大值,CPU和IO取最后一次的累积值就可以。

内容的提问来源于stack exchange,提问作者Solti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:37:45