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

如何使用Python查看CPU使用率、堆内存使用率、线程数及进程数

多进程程序的系统资源监控方法

针对多进程程序的CPU使用率、堆内存使用率、进程数及线程数监控,分操作系统和实现方式整理如下:


Linux/Unix 环境

命令行工具(快速排查)

  • 查看进程数:用ps过滤目标程序
    ps -ef | grep "你的程序名" | grep -v grep | wc -l
    
  • 查看线程数:针对单个进程查看线程
    # 替换<PID>为目标进程ID
    ps -L -p <PID> | wc -l
    # 或者用htop(需先安装),按H键显示线程,直接查看每个进程的线程数
    
  • 实时CPU/内存监控:
    • top:启动后按H显示线程,Shift+P按CPU使用率排序,Shift+M按内存排序;输入o可自定义列(比如添加THREAD列)
    • htop:更直观的界面,默认显示进程的CPU、内存占比及线程数
  • 堆内存细节:用pmap查看进程内存分布,堆内存会标记为heap
    pmap -x <PID> | grep heap
    
  • 批量进程监控:pidstat可以按进程/线程维度采样
    # 每2秒采样一次,监控目标进程的CPU(含线程)
    pidstat -u -t -p <PID> 2
    # 监控内存使用
    pidstat -r -p <PID> 2
    

编程实现(自定义监控)

通过读取/proc文件系统实现:

  • 线程数:读取/proc/<PID>/stat的第20个字段
  • CPU使用率:计算/proc/<PID>/stat中的utime和stime两次采样的差值,结合系统总CPU时间换算
  • 堆内存:解析/proc/<PID>/maps文件,找到标记为[heap]的内存区域的大小

Windows 环境

图形化/命令行工具

  • 任务管理器:打开后切换到「详细信息」,查看目标进程的「CPU」「内存(私有工作集)」列;右键进程选择「转到线程」可查看线程数
  • 命令行查看进程/线程数:
    # 查看目标程序的进程列表及内存
    tasklist /fi "imagename eq 你的程序名.exe"
    # 查看线程数
    wmic process where name='你的程序名.exe' get ProcessId,ThreadCount
    
  • 性能监视器(perfmon):
    启动后添加计数器,选择「进程」类别下的「%处理器时间」「工作集」「线程数」,并指定目标程序的进程实例,可生成长期监控报表

编程实现

调用Win32 API:

  • CreateToolhelp32Snapshot:枚举进程和线程,统计进程数、线程数
  • GetProcessMemoryInfo:获取进程内存信息,其中WorkingSetSize为驻留内存,堆内存可通过HeapWalk遍历进程堆统计
  • GetProcessTimes:获取进程的用户态/内核态CPU时间,结合系统时间计算CPU使用率

跨平台编程实现(推荐)

用Python的psutil库可以轻松实现跨平台监控,无需关注系统差异:

import psutil
import time

def monitor_target(process_name):
    while True:
        # 筛选所有匹配的进程
        target_procs = [
            proc for proc in psutil.process_iter(['name', 'pid', 'cpu_percent', 'memory_info', 'num_threads'])
            if proc.info['name'] == process_name
        ]
        
        if not target_procs:
            print(f"未找到进程: {process_name}")
            time.sleep(5)
            continue
        
        print(f"\n=== [{time.strftime('%Y-%m-%d %H:%M:%S')}] 监控统计 ===")
        print(f"总进程数: {len(target_procs)}")
        
        total_cpu = 0.0
        total_rss = 0.0
        total_threads = 0
        
        for proc in target_procs:
            try:
                cpu_pct = proc.info['cpu_percent']
                mem_info = proc.info['memory_info']
                thread_count = proc.info['num_threads']
                
                total_cpu += cpu_pct
                total_rss += mem_info.rss
                total_threads += thread_count
                
                # 堆内存可通过memory_full_info获取(需足够权限)
                heap_mem = proc.memory_full_info().heap if hasattr(proc.memory_full_info(), 'heap') else "N/A"
                print(f"PID {proc.info['pid']}: CPU {cpu_pct}%, 驻留内存 {mem_info.rss/1024/1024:.2f} MB, 堆内存 {heap_mem/1024/1024:.2f} MB, 线程数 {thread_count}")
            except (psutil.NoSuchProcess, psutil.AccessDenied):
                continue
        
        print(f"总计: CPU {total_cpu}%, 总驻留内存 {total_rss/1024/1024:.2f} MB, 总线程数 {total_threads}")
        time.sleep(3)

if __name__ == "__main__":
    # 替换为你的程序名称(比如linux下的可执行文件名,windows下的exe名)
    monitor_target("your_program_name")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:25:22