Ввиду сложности, присущей операционным системам с подкачкой по требованию, следить за ресурсами, связанными с памятью, в Red Hat Enterprise Linux не так просто. Поэтому для начала лучше рассмотреть более примитивные средства.
С помощью free можно получить краткий (и несколько упрощённый) обзор использования памяти и подкачки. Например:
total used free shared buffers cached Mem: 1288720 361448 927272 0 27844 187632 -/+ buffers/cache: 145972 1142748 Swap: 522104 0 522104
Заметим, что в данном компьютере 1,2 Гбайт ОЗУ, из которых фактически используется всего около 350 МБайт. Как и следует ожидать, при таком объёме свободной памяти, раздел подкачки размером 500 Мбайт не используется.
Сравните этот пример со следующим:
total used free shared buffers cached Mem: 255088 246604 8484 0 6492 111320 -/+ buffers/cache: 128792 126296 Swap: 530136 111308 418828
В данном компьютере около 256 Мбайт памяти, причём почти вся память занята, свободно всего 8 Мбайт. Кроме этого в разделе подкачки объёмом 512 Мбайт занято больше 100 Мбайт. Хотя в плане памяти второй компьютер определённо более ограничен, чем первый, чтобы определить, вызывает ли это ограничение памяти проблемы производительности, мы должны посмотреть немного глубже.
Для этого можно воспользоваться командой vmstat, которая выводит больше, чем просто показатели использования памяти, хотя и в менее понятной форме, чем free. Ниже показан результат команды vmstat 1 10:
procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 2 0 0 111304 9728 7036 107204 0 0 6 10 120 24 10 2 89 2 0 0 111304 9728 7036 107204 0 0 0 0 526 1653 96 4 0 1 0 0 111304 9616 7036 107204 0 0 0 0 552 2219 94 5 1 1 0 0 111304 9616 7036 107204 0 0 0 0 624 699 98 2 0 2 0 0 111304 9616 7052 107204 0 0 0 48 603 1466 95 5 0 3 0 0 111304 9620 7052 107204 0 0 0 0 768 932 90 4 6 3 0 0 111304 9440 7076 107360 92 0 244 0 820 1230 85 9 6 2 0 0 111304 9276 7076 107368 0 0 0 0 832 1060 87 6 7 3 0 0 111304 9624 7092 107372 0 0 16 0 813 1655 93 5 2 2 0 2 111304 9624 7108 107372 0 0 0 972 1189 1165 68 9 23
Во время этой 10-секундной выборки объём свободной памяти (поле free) несколько меняется и наблюдается небольшая активность ввода/вывода, связанная с подкачкой, (поля si и so), но в целом система работает хорошо. Однако возникают сомнения по поводу того, как этот компьютер справится с дополнительной нагрузкой, учитывая текущее использование памяти.
Исследуя вопросы, связанные с памятью, часто необходимо определить, как подсистема виртуальной памяти Red Hat Enterprise Linux использует память компьютера. С помощью sar вы можете изучить этот аспект производительности системы ещё более подробно.
Отчёт sar -r позволяет нам ещё глубже рассмотреть использование памяти и подкачки:
Linux 2.4.20-1.1931.2.231.2.10.ent (pigdog.example.com) 07/22/2003 12:00:01 AM kbmemfree kbmemused %memused kbmemshrd kbbuffers kbcached 12:10:00 AM 240468 1048252 81.34 0 133724 485772 12:20:00 AM 240508 1048212 81.34 0 134172 485600 … 08:40:00 PM 934132 354588 27.51 0 26080 185364 Average: 324346 964374 74.83 0 96072 467559
Поля kbmemfree и kbmemused показывают обычную статистику свободной и занятой памяти, а в поле %memused показан процент используемой памяти. Поля kbbuffers и kbcached показывают, сколько килобайт памяти выделено для буферов и кэша данных на уровне системы.
Поле kbmemshrd в системах с ядром Linux версии 2.4 (в частности, в Red Hat Enterprise Linux) всегда равно 0.
Строки этого отчёта были обрезаны, чтобы они уместились на странице. Вот как выглядят окончания этих строк (для облегчения восприятия слева добавлено время выборки):
12:00:01 AM kbswpfree kbswpused %swpused 12:10:00 AM 522104 0 0.00 12:20:00 AM 522104 0 0.00 … 08:40:00 PM 522104 0 0.00 Average: 522104 0 0.00
Поля kbswpfree и kbswpused показывают объём свободного и используемого пространства подкачки (в килобайтах), а поле %swpused показывает процент используемого пространства подкачки.
Больше узнать о работе подсистемы подкачки вам позволит отчёт sar -W. Взгляните на пример этого отчёта:
Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com) 07/22/2003 12:00:01 AM pswpin/s pswpout/s 12:10:01 AM 0.15 2.56 12:20:00 AM 0.00 0.00 … 03:30:01 PM 0.42 2.56 Average: 0.11 0.37
Здесь мы замечаем, что в среднем из пространства подкачки загружается в три раза меньше страниц (pswpin/s), чем выгружается из памяти (pswpout/s).
Чтобы лучше понять, как используются страницы, обратитесь к отчёту sar -B:
Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com) 07/22/2003 12:00:01 AM pgpgin/s pgpgout/s activepg inadtypg inaclnpg inatarpg 12:10:00 AM 0.03 8.61 195393 20654 30352 49279 12:20:00 AM 0.01 7.51 195385 20655 30336 49275 … 08:40:00 PM 0.00 7.79 71236 1371 6760 15873 Average: 201.54 201.54 169367 18999 35146 44702
Здесь мы можем определить, сколько блоков в секунду подкачивается с диска (pgpgin/s) и сколько выгружается на диск (pgpgout/s). Эти показатели являются своего рода барометром общей активности виртуальной памяти.
Но изучив другие поля этого отчёта, можно узнать ещё больше. Ядро Red Hat Enterprise Linux помечает все страницы как активные или неактивные. Как и следует из названия, активные страницы в данный момент используются некоторым образом (например, это страницы процессов или буферов), тогда как неактивные страницы не используются. Этот пример отчёта показывает, что объём активных страниц (поле activepg) в среднем равен 660 Мбайт [1].
Остальные поля этого отчёта посвящены списку неактивных страниц — страниц, которые по той или иной причине, в последнее время не использовались. Поле inadtypg показывает количество «грязных» (изменённых) неактивных страниц, которые, возможно, необходимо записать на диск. Поле inaclnpg, напротив, показывает число «чистых» (неизменённых) неактивных страниц, которые не нужно записывать на диск.
Поле inatarpg представляет желательный объём неактивных страниц. Это значение вычисляется ядром Linux таким образом, чтобы список неактивных страниц имел достаточный размер для использования его при необходимости для замены страниц.
Чтобы больше узнать о состоянии страниц (и особенно о том, как это состояние меняется), воспользуйтесь отчётом sar -R. Вот как выглядит этот отчёт:
Linux 2.4.20-1.1931.2.231.2.10.entsmp (raptor.example.com) 07/22/2003 12:00:01 AM frmpg/s shmpg/s bufpg/s campg/s 12:10:00 AM -0.10 0.00 0.12 -0.07 12:20:00 AM 0.02 0.00 0.19 -0.07 … 08:50:01 PM -3.19 0.00 0.46 0.81 Average: 0.01 0.00 -0.00 -0.00
Показатели данного отчёта sar уникальны в своём роде, так как они могут быть положительными, отрицательными или равны нулю. Положительное значение показывает скорость, с которой увеличивается число страниц данного типа. Отрицательное значение показывает скорость, с которой число страниц данного типа уменьшается. Нулевое значение показывает, что число страниц данного типа не меняется.
В данном примере, последняя выборка несколько отличается от трёх других числом страниц, выделяемых из списка свободных за секунду (поле frmpg/s) и числом страниц (около 1), добавляемых за секунду в кэш страниц (поле campg/s). В список страниц, используемых в качестве буфера, (поле bufpg/s) добавляется примерно одна страница за две секунды, тогда как объём страниц разделяемой памяти (поле shmpg/s) не меняется.
Замечания
[1] | Размер страницы в Red Hat Enterprise Linux на платформе x86, использованной в этом примере, составляет 4096 байт. В компьютерах, основанных на других платформах, размер страницы может быть другим. |