
Я могу получить прекрасную карту памяти всех процессов с помощью команды 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
для каждого процесса, действительны только в собственном адресном пространстве этих процессов, т. е. в их виртуальной памяти. Они будут как бы "перекрываться", хотя технически они соответствуют разным страницам. Некоторые из них будут не в ОЗУ, а на диске.
С другой стороны, страницы, принадлежащие ядру, хранятся в физической памяти.
решение2
Лучшим подходом было бы использование sysrq.
Выполните следующую команду и проверьте файл /var/log/messages.
# echo m > /proc/sysrq-trigger
Это даст вам зонный дамп памяти. Проверьте следующий URL
https://www.kernel.org/doc/gorman/html/understand/understand005.html