有沒有辦法按 ps 或 top 中的非共享(私有)記憶體使用情況對進程進行排序?

有沒有辦法按 ps 或 top 中的非共享(私有)記憶體使用情況對進程進行排序?

我已經能夠透過總結匿名和堆疊映射來計算非共享記憶體使用情況,pmap -x例如

sudo pmap -x $THE_PID |egrep 'anon|stack' | awk '{print $2}' | paste -sd+ | bc

但根本找不到任何方法來獲取類似的資訊pstop顯示一SHR列,但似乎沒有提供按非共享記憶體排序的方法。按 RSS 排序沒有用,因為 RSS 包含共用頁面,但僅 AFAICS 程序觸及的那些共用頁面。

因此,如果您有兩個進程,都使用相同的 16GB 共享位址空間,它們將根據哪個進程觸及更多共享記憶體進行排序。除非兩者都接觸了相同數量的 shmem 或接近它,否則不會分配更多的私有(非共享)記憶體。

共享庫的讀取/寫入映射以及共享其祖先的寫時複製頁面的forked-but-not -d 進程也會出現類似的問題。exec

這……毫無幫助。

我研究了top按表達式對輸出進行排序的方法。但如果它的排序語法支援它,我就無法弄清楚。

這看起來是很明顯的事情,但 ps 甚至根本沒有公開分享資訊!

請告訴我我錯過了什麼。

相關內容