我已經能夠透過總結匿名和堆疊映射來計算非共享記憶體使用情況,pmap -x
例如
sudo pmap -x $THE_PID |egrep 'anon|stack' | awk '{print $2}' | paste -sd+ | bc
但根本找不到任何方法來獲取類似的資訊ps
。top
顯示一SHR
列,但似乎沒有提供按非共享記憶體排序的方法。按 RSS 排序沒有用,因為 RSS 包含共用頁面,但僅 AFAICS 程序觸及的那些共用頁面。
因此,如果您有兩個進程,都使用相同的 16GB 共享位址空間,它們將根據哪個進程觸及更多共享記憶體進行排序。除非兩者都接觸了相同數量的 shmem 或接近它,否則不會分配更多的私有(非共享)記憶體。
共享庫的讀取/寫入映射以及共享其祖先的寫時複製頁面的fork
ed-but-not -d 進程也會出現類似的問題。exec
這……毫無幫助。
我研究了top
按表達式對輸出進行排序的方法。但如果它的排序語法支援它,我就無法弄清楚。
這看起來是很明顯的事情,但 ps 甚至根本沒有公開分享資訊!
請告訴我我錯過了什麼。