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

基于Ruby实现Windows 10应用内存使用量监控的问题

Windows 10下Ruby监控进程实时内存的可行方案

一、优化sys-proctable的使用逻辑

你之前拿到的working_set_size是进程的工作集大小,而且Chrome是多进程架构,只抓单个进程肯定和实际总占用差很多。sys-proctable还提供了更贴近你需求的内存属性,同时要遍历所有匹配进程累加:

require 'sys/proctable'
include Sys

target_process = "chrome.exe"
total_private_memory = 0

# 遍历所有进程,累加同名进程的独占内存
ProcessTable.ps.each do |proc|
  total_private_memory += proc.private_bytes if proc.name.downcase == target_process.downcase
end

# 转换为MB输出
puts "#{target_process}总独占内存: #{(total_private_memory / 1024 / 1024).round(2)} MB"

这里的private_bytes对应任务管理器里的「专用内存」,是进程实际独占的内存资源,比工作集更贴近你要的“实际内存使用量”。

二、用WMI获取和任务管理器一致的数据

通过Ruby的win32ole调用Windows的WMI接口,能拿到和任务管理器完全匹配的内存指标,比如「专用工作集」或「提交大小」:

require 'win32ole'

wmi = WIN32OLE.connect("winmgmts://")
target_process = "chrome.exe"
total_usage = 0

# 查询所有目标进程,累加专用工作集(对应任务管理器的「内存」列)
wmi.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '#{target_process}'").each do |proc|
  total_usage += proc.WorkingSetPrivate.to_i
end

puts "#{target_process}总内存占用: #{(total_usage / 1024 / 1024).round(2)} MB"

如果需要获取「提交大小」,把WorkingSetPrivate换成PageFileUsage即可。

三、直接调用系统命令解析结果

快速验证的话,可以调用Windows原生的tasklist命令,解析输出结果:

target_process = "chrome.exe"
# 执行命令获取CSV格式的进程详情
output = `tasklist /fi "imagename eq #{target_process}" /v /fo csv`

total_mem_kb = 0
# 跳过表头,遍历每一行进程数据
output.split("\n")[1..-1].each do |line|
  parts = line.split('","')
  # 提取内存列(CSV第14项,单位KB)
  mem_kb = parts[13].delete('"').delete(',').to_i
  total_mem_kb += mem_kb
end

puts "#{target_process}总内存使用: #{(total_mem_kb / 1024).round(2)} MB"

关键注意点

  • Chrome是多进程架构,必须统计所有同名进程的内存总和,才能得到浏览器实际的总内存占用
  • 不同内存指标对应任务管理器的不同列,根据你的监控需求选择对应属性即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:38:17