| |||||||
adm | Find | login register |
以前用 ps aux 看在跑的程式,老是覺得許多小小的 linux 的程式怎麼好像也蠻耗記憶體的,今天查資料時看到一篇文章,才恍然大悟: Understanding memory usage on Linux 大意是說,許多程式會把 shared library 佔的記憶體算進來,但實際上,linux 很聰明,它載入 shared library 後,如果其他程式要用,它可以不需要再重覆載入一次,而 ps 回報的,很不幸的,包含了它用到的 shared libraries,所以有時會多算。 作者也介紹了一個不錯用的工具 pmap,可以用來看某程式記憶體的佔用的情形。用法是: pmap [-x | -d] [-q] [-A low,high] pid... 在 debian 中這個程式是包在 procps,與 top、ps、psgrep、pskill、sysctl......等同一個 package,所以應該大部分 distros 都有。 不妨看看你的 gcin 記憶體佔用狀況如何: $ pmap `pgrep gcin`|sort -h -k2 edited: 4
| |||||||||||
pmap 裏面的 gcin1.so 怎麼會接近實際的 strip 過的 gcin1.so 的大小,gcin1.so 是把一些很少用的功能放在裏面,需要的時候才 load 進來。 原本我認為 .so 裏面的 functions 應該是有 call 到的時候才 load 進來,照 pmap 看起來似乎不是。 不過看起來 .so 全部 load 進來似乎不合理,這樣浪費 memory。 | |||||||||||
ps 已經有問題了,搞不好 pmap 顯示的資訊也有問題 | |||||||||||
我就不相信 libc 裏面的 function 全部有用到所以 load 進來
pmap : 1384K r-x-- /lib/i686/libc-2.10.1.so file size: 1433972 /lib/i686/libc-2.10.1.so |
| |||||||
adm | Find | login register |