2011-12-02 47 views
0

我一直在尋找一種方法來測量Linux上的內存使用情況。我發現了三種主要的做法,我不確定我應該使用什麼,因此我在這裏詢問意見。通過系統調用在Linux上監控內存

  1. 看來的 監測記憶中最普遍的,也許更簡單的方法是讀取/ proc /進程/狀態和閱讀的 相應的字段,VmSizeVmData或什麼的。這是 程序ps,to,vmstat設法收集這些信息的方式(我的意思是, monitoring/proc/pid/...)。此信息將提供 即時信息。

  2. 我可以調用一個fork,然後執行一個exec來運行我想要 的程序來監視wait4,以填充一個rusage結構。從那裏 我可以閱讀所需的領域。看起來雖然在Linux中, wait4沒有填充rsusage結構中的內存字段,但只有 與CPU使用相關的字段。這是時間命令獲取 的方式。

  3. 我可以更改strace代碼,以跟蹤所有超級brk, mmap,munmap系統調用,並總結得到堆大小。 這裏很難解碼所有可能的mmap參數,只讀 ,read | write,exec等,並測試返回值以確定 系統是否成功。

對於3),你認爲我可以用這種方式來測量內存使用情況嗎?這會太難嗎?我對strace代碼有很好的理解,但是我對內存不夠了解,不知道這是否可行。

+0

爲什麼不使用第一種方法?如果操作系統已經爲你做了檢測工具,爲什麼要試用呢? – NPE

回答

0

如果你的程序只對使用malloc()完成的內存分配感興趣,你可以看看mallinfo()。

0

在Linux上,有關內存映射的更精確信息可通過pmap/proc/self/maps/proc/1234/maps文件獲得(其中1234是進程ID)。嘗試cat /proc/self/maps瞭解更多。