我想从命令行获取 OSX 下的进程消耗的虚拟私有内存。这是活动监视器在“虚拟内存”列中报告的值。ps -o vsz
报告进程可用的总地址空间,因此无用。
问问题
434 次
3 回答
1
可以通过运行获取单个进程的虚拟私有内存使用情况
top -l 1 -s 0 -i 1 -stats vprvt -pid PID
您感兴趣的进程的进程 ID在哪里PID
。这会导致大约十几行输出以
VPRVT
55M+
所以通过解析最后一行输出,至少可以得到内存占用量(MB)。我在 OSX 10.6.8 上对此进行了测试。
于 2013-06-04T15:24:23.387 回答
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
于 2012-07-14T09:48:44.140 回答
0
更新的答案,这在优胜美地下工作,来自 user1389686:
top -l 1 -s 0 -stats mem -pid PID
于 2016-05-02T12:11:15.813 回答