2

コマンドラインから、OSX のプロセスで消費される仮想プライベート メモリを取得したいと考えています。これは、Activity Monitor が「Virtual Mem」列に報告する値です。ps -o vszは、プロセスが使用できるアドレス空間の合計を報告するため、役に立ちません。

4

3 に答える 3

1

次のコマンドを実行すると、単一プロセスの仮想プライベート メモリの使用量を取得できます。

top -l 1 -s 0 -i 1 -stats vprvt -pid PID

wherePIDは、関心のあるプロセスのプロセス ID です。これにより、約 12 行の出力が次で終了します。

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

ユーザー1389686からの更新された回答、それはヨセミテで機能します:

top -l 1 -s 0 -stats mem -pid PID
于 2016-05-02T12:11:15.813 に答える