星期三, 5月 02, 2012

在 Mac OSX 下觀看 process 的記憶體使用量

寫這個小程式的目的只是想知道 Chrome 總共吃了多少記憶體而己 ... Orz (我好無聊 XD)

這件事其實很簡單,但是我不太會用 shell,所以仿造 godfat 以前寫的 mem_usb.rb (原 po 提供連結了 XD)(連結找不到了 XD)。寫了一個簡單的 proc_mem.py 程式碼如下



#!/usr/bin/env python
import subprocess
import sys

def main():
    proc_name = sys.argv[1] if len(sys.argv) >=2 else "Google Chrome"
    proc_list = subprocess.check_output(["ps", "-Ao", "rss,comm"])
    print str(sum([int(proc.split()[0]) for proc in proc_list.split('\n') if proc.count(proc_name)>0])/1024.0) + " M"

if __name__ == "__main__":
    main()
使用上很簡單,輸入你想看的 process 名字就可以看到了,如果什麼都不輸入,預設是 "Google Chrome"。

---

我的 Google Chrome 吃了 3.5 gb 啊 ... (遠目)。

3 則留言:

Unknown 提到...

會有很大的誤差喔
Fork的memory會重複計算
但是copy-on-write會讓沒改變的區塊用同一份

記得Chrome內建的工作管理員也有這個問題
這還是Chromium project末解的一張issue

Lin Jen-Shin (godfat) 提到...

在這 XD
https://github.com/godfat/dev-tool/blob/master/bin/memsum

不過我不知道 fork 會導致算出來的數字不是真實數字 @@
mac 的 Activity Monitor 給的數字常常跟 ps 也差很多,
不知道是否跟這個有關..?

yen3 提到...

@ bigcat
fork 出來的 process 會重覆計算,這我倒是不知道 ... 看來是個未知的問題。

如果是這個樣子的話 ... 我也不知道要怎麼辦 XD

@godfat
謝啦,我會補連結上去 XD