Подтвердить что ты не робот

Как увидеть представление Linux в ОЗУ для определения фрагментации

Единственная программа, о которой я знаю, - pmap, но это только печатает память одного процесса.

Я хотел бы посмотреть, как занята физическая память и с помощью каких процессов/библиотеки, включая ядро, всю физическую RAM (в отличие от процесса POV с pmap).

Идеально также с графическим интерфейсом.

Знаете ли вы, есть ли такой инструмент?

Я знаю о неоднозначности, введенной библиотеками. В этом случае он может отображать 1-пиксельную широкую линию и стрелку в реальном местоположении этой библиотеки.

Для чего мне это нужно? Для просмотра фрагментации ОЗУ.

4b9b3361

Ответ 1

Фрагментация памяти

Когда система Linux работает в течение некоторого времени, фрагментация памяти может увеличиться, что сильно зависит от характера приложений, которые на ней работают. Чем больше процессов выделяет и освобождает память, тем быстрее память становится фрагментированной. И ядро ​​не всегда может дефрагментировать достаточное количество памяти для запрашиваемого размера во времени. Если это произойдет, приложениям не удастся выделить большие смежные фрагменты памяти, даже если имеется достаточно свободной памяти. Начиная с ядра 2.6, то есть RHEL4 и SLES9, управление памятью значительно улучшилось, а фрагментация памяти стала меньше проблемой.

Чтобы увидеть фрагментацию памяти, вы можете использовать магический ключ SysRq. Просто выполните следующую команду:

# echo m > /proc/sysrq-trigger

Эта команда будет выгружать текущую информацию о памяти в /var/log/messages. Ниже приведен пример 32-разрядной системы RHEL3:

Jul 23 20:19:30 localhost kernel: 0*4kB 0*8kB 0*16kB 1*32kB 0*64kB 1*128kB 1*256kB 1*512kB 1*1024kB 0*2048kB 0*4096kB = 1952kB)
Jul 23 20:19:30 localhost kernel: 1395*4kB 355*8kB 209*16kB 15*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 12244kB)
Jul 23 20:19:31 localhost kernel: 1479*4kB 673*8kB 205*16kB 73*32kB 21*64kB 847*128kB 473*256kB 92*512kB 164*1024kB 64*2048kB 28*4096kB = 708564kB)

В первой строке показана фрагментация памяти DMA. Во второй строке показана фрагментация с низкой памятью, а в третьей строке показана фрагментация высокой памяти. На выходе показана фрагментация памяти в области с низкой памятью. Но есть много больших блоков памяти, доступных в области высокой памяти, например. 28 4 МБ.

Если информация о памяти не была сброшена в /var/log/messages, тогда SysRq не был включен. Вы можете включить SysRq, установив sysrq в 1:

# echo 1 > /proc/sys/kernel/sysrq

Начиная с ядра 2.6, то есть RHEL4 и SLES9, вам не нужна SysRq для вывода информации о памяти. Вы можете просто проверить /proc/buddyinfo для фрагментации памяти.

Вот результат работы 64-битного сервера с ядром 2.6:

# cat /proc/buddyinfo

Node 0, zone DMA 5 4 3 4 3 2 1 0 1 1 2
Node 0, zone Normal 1046 527 128 36 17 5 26 40 13 16 94
# echo m > /proc/sysrq-trigger
# grep Normal /var/log/messages | tail -1
Jul 23 21:42:26 localhost kernel: Normal: 1046*4kB 529*8kB 129*16kB 36*32kB 17*64kB 5*128kB 26*256kB 40*512kB 13*1024kB 16*2048kB 94*4096kB = 471600kB
#

В этом примере я снова использовал SysRq, чтобы показать, к чему относится каждое число в /proc/buddyinfo.

Источник: http://www.puschitz.com/pblog/