
Ich kann eine wunderbare Speicherzuordnung aller Prozesse mit dem Linux-Befehl erhalten
pmap $(ps -A | awk '{print $1}'|grep -v PID) | sort | grep \^0
Es sieht aus wie
...
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
...
Hier werden die Speicherzuordnungen aller Prozesse zusammengeführt. Mir fehlt allerdings die Information, wo der Kernel seine Speicherseiten hat. Gibt es ein ähnliches Tool für die „komplette Speicherzuordnung“?
Antwort1
Ihr Befehl ergibt nicht viel Sinn. Die von pmap
jedem Prozess gemeldeten Adressen sind nur im eigenen Adressraum dieser Prozesse gültig, also in ihrem virtuellen Speicher. Sie werden sich gewissermaßen „überlappen“, obwohl sie technisch gesehen unterschiedlichen Seiten entsprechen. Einige von ihnen befinden sich nicht im RAM, sondern auf der Festplatte.
Die vom Kernel verwendeten Seiten werden dagegen im physischen Speicher gespeichert.
Antwort2
Ein besserer Ansatz wäre, sysrq zu verwenden.
Führen Sie Folgendes aus und überprüfen Sie Ihre /var/log/messages.
# echo m > /proc/sysrq-trigger
Dies würde Ihnen einen zonenweisen Speicherauszug geben. Überprüfen Sie die folgende URL
https://www.kernel.org/doc/gorman/html/understand/understand005.html