2017-05-24 58 views
0

我想弄清楚一個程序需要多少內存。我需要運行這個程序的多個實例,我想知道需要多少額外的RAM。我做了一些研究,並找到使用我做的內存量:頂,這給了我下面的找出一個進程在linux中使用多少額外的物理內存

Mem: 32880876k total, 7573308k used, 25307568k free, 192956k buffers 
Swap: 8241148k total,  0k used, 8241148k free, 4800560k cached 

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
27464 root  20 0 3107m 1.9g 19m S 99.6 6.0 0:37.78 krypton 

RES,如果我理解正確的是常駐內存是內存駐留在實際量內存。當我運行2個程序的實例時,我注意到兩者的RES字段都在5Gb左右,但是使用的總內存(顯示在頂部)並沒有像我預期的那樣增加10Gb,而是上升了不到爲1GB。

我對此做了一些研究,發現RES還包括共享內存。使用與上面相同的場景,我注意到共享內存SHR每個都在4.7Gb左右。因此,執行一個簡單的減法操作會產生大約0.3Gb,那麼這是否意味着當我運行我的程序的2個實例時,我需要4.7Gb +(0.3Gb)* 2 = 5.3Gb的RAM? SHR內存還包括虛擬內存嗎?

如果是這樣,我是否需要從SHR中減去VIRT來找出來自RAM的內存量?如果這個內存使用量線性上升,運行20個實例需要4.7Gb +(0.3Gb)* 20 = 10.7Gb的RAM?

+1

忽略VIRT,RES,SHR和其他每個過程度量標準。查看全局使用的內存值(頂線)。運行一個實例,注意值。運行兩個實例,注意值。繼續進行另一次迭代。繪製一張圖。推斷。 –

回答

0

你想檢查/ proc/pid/smaps。運行2個實例,然後查找Private_ *字段。

相關問題