如何从OSX下的命令行获取进程的虚拟专用内存?

时间:2012-05-11 14:38:51

标签: macos memory command-line

我想从命令行获取OSX下的进程所消耗的虚拟专用内存。这是活动监视器在“虚拟内存”列中报告的值。 ps -o vsz报告进程可用的总地址空间,因此无用。

3 个答案:

答案 0 :(得分:1)

您可以通过运行

获取单个进程的虚拟专用内存使用
top -l 1 -s 0 -i 1 -stats vprvt -pid PID

其中PID是您感兴趣的流程的进程ID。这导致大约十几行输出以

结尾
VPRVT
55M+ 

因此,通过解析最后一行输出,至少可以获得以MB为单位的内存占用量。我在OSX 10.6.8上进行了测试。

答案 1 :(得分:0)

更新

我意识到(在我被投票后)@ user1389686在OP的评论部分给出了一个比我的微不足道的第一次尝试更好的答案。以下内容基于user1389686自己的答案。我不能相信它 - 我刚刚清理了一下。

原文,用-stats vprvt

编辑

正如Mahmoud Al-Qudsi所说,top做你想做的事。如果PID 8631是您要检查的过程:

$ top -l 1 -s 0 -stats vprvt -pid 8631
Processes: 84 total, 2 running, 82 sleeping, 378 threads 
2012/07/14 02:42:05
Load Avg: 0.34, 0.15, 0.04 
CPU usage: 15.38% user, 30.76% sys, 53.84% idle 
SharedLibs: 4668K resident, 4220K data, 0B linkedit.
MemRegions: 15160 total, 961M resident, 25M private, 520M shared.
PhysMem: 917M wired, 1207M active, 276M inactive, 2400M used, 5790M free.
VM: 171G vsize, 1039M framework vsize, 1523860(0) pageins, 811163(0) pageouts.
Networks: packets: 431147/140M in, 261381/59M out.
Disks: 487900/8547M read, 2784975/40G written.

VPRVT
8631

以下是使用一些Ruby代码获取此值的方法:

# Return the virtual memory size of the current process
def virtual_private_memory
  s = `top -l 1 -s 0 -stats vprvt -pid #{Process.pid}`.split($/).last
  return nil unless s =~ /\A(\d*)([KMG])/
  $1.to_i * case $2
            when "K" 
              1000
            when "M" 
              1000000
            when "G" 
              1000000000
            else
              raise ArgumentError.new("unrecognized multiplier in #{f}")
            end
end

答案 2 :(得分:0)

更新的答案,在Yosemite下工作,来自user1389686:

top -l 1 -s 0 -stats mem -pid PID