我可以使用 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