
我可以使用Linux命令獲得所有進程的精彩記憶體映射
pmap $(ps -A | awk '{print $1}'|grep -v PID) | sort | grep \^0
看起來像
...
00007fd6dbf45000 4K rw--- /lib/libnss_compat-2.11.1.so
00007fd6dbf46000 1524K r-x-- /lib/libc-2.11.1.so
00007fd6dc0c3000 2044K ----- /lib/libc-2.11.1.so
...
所有進程的記憶體映射都合併在這裡。但我缺少內核記憶體頁面所在的資訊。有沒有類似的「完整記憶體映射」工具?
答案1
你的命令沒有太大意義。每個進程報告的位址pmap
僅在這些進程自己的位址空間中有效,即在它們的虛擬記憶體中。從技術上講,它們對應於不同的頁面,但它們會有點「重疊」。其中一些不會位於 RAM 中,而是位於磁碟上。
另一方面,核心使用擁有的頁面儲存在實體記憶體上。
答案2
更好的方法是使用 sysrq。
執行以下命令並檢查您的 /var/log/messages。
# echo m > /proc/sysrq-trigger
這將為您提供區域明智的記憶體轉儲。結帳以下網址
https://www.kernel.org/doc/gorman/html/understand/understand005.html