カーネルが所有するメモリページを確認する

カーネルが所有するメモリページを確認する

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 を確認します。

# エコー m > /proc/sysrq-trigger

これにより、ゾーンごとのメモリダンプが得られます。次の URL を確認してください。

https://www.kernel.org/doc/gorman/html/understand/understand005.html

関連情報