Библиотека сайта rus-linux.net
Администрирование систем Linux. Управление распределением памяти
Оригинал: Memory managementАвтор: Paul Cobbaut
Дата публикации: 12 марта 2015 г.
Перевод: A. Панин
Дата перевода: 31 марта 2015 г.
Глава 18. Управление распределением памяти
Из данной главы вы узнаете о том, как управлять распределением оперативной памяти и кэшей.
В начале главы рассматриваются простые команды, предназначенные для вывода информации о состоянии памяти: free -om
, top
и cat /proc/meminfo
.
После них описывается методика управления пространством подкачки, причем в описании используются такие понятия, как перемещение страницы памяти в область подкачки
(swapping), перемещение страницы памяти в оперативную память
(paging) и виртуальная память
(virtual memory).
Последняя часть главы посвящена утилите vmstat
, которая используется для мониторинга использования пространства подкачки.
18.1. Вывод информации о памяти и кэшах
18.1.1. Файл /proc/meminfo
Просмотрев содержимое файла /proc/meminfo
, вы можете получить достаточно большой объем информации об использовании памяти вашего компьютера, работающего под управлением Linux.
paul@ubu1010:~$ cat /proc/meminfo MemTotal: 3830176 kB MemFree: 244060 kB Buffers: 41020 kB Cached: 2035292 kB SwapCached: 9892 kB ...
Первая строка содержит информацию об общем объеме физической оперативной памяти, вторая строка - информацию об объеме неиспользованной оперативной памяти. В строке, начинающейся со слова "Buffers"
содержится информация об объеме оперативной памяти, использованной для буферизации файлов, со слова "cached"
- информация об объеме оперативной памяти, используемой в качестве кэша, а со слова "SwapCached"
- информация об объеме памяти из пространства подкачки, используемой в качестве кэша. Данный файл также содержит много другой информации, рассмотрение которой в рамках данного курса является нецелесообразным.
18.1.2. Утилита free
Утилита free
выводит информацию из файла /proc/meminfo
в более удобном для чтения формате. В примере ниже показан вывод рассматриваемой утилиты, содержащий краткую информацию об использовании памяти со значениями в мегабайтах.
paul@ubu1010:~$ free -om total used free shared buffers cached Mem: 3740 3519 221 0 42 1994 Swap: 6234 82 6152
8.1.3.Утилита top
Обычно утилита top
применяется для выявления процессов, которые наиболее интенсивно используют ресурс центрального процессора, но при этом данная утилита также выводит информацию о состоянии памяти в четвертой и пятой строке (эти строки могут скрываться и восстанавливаться с помощью клавиши m
).
Ниже приведен пример вывода утилиты top после запуска на рассматриваемой системе ubu1010.
top - 10:44:34 up 16 days, 9:56, 6 users, load average: 0.13, 0.09, 0.12 Tasks: 166 total, 1 running, 165 sleeping, 0 stopped, 0 zombie Cpu(s): 5.1%us, 4.6%sy, 0.6%ni, 88.7%id, 0.8%wa, 0.0%hi, 0.3%si, 0.0%st Mem: 3830176k total, 3613720k used, 216456k free, 45452k buffers Swap: 6384636k total, 84988k used, 6299648k free, 2050948k cached
18.2. Управление пространством подкачки
18.2.1. Информация о пространстве подкачки
Если операционной системе требуется объем памяти, превышающий объем имеющейся физической оперативной памяти, она может задействовать пространство подкачки
. Пространство подкачки располагается на более медленном, но более дешевом устройстве для хранения данных. Обратите внимание на то, что хотя жесткие диски и используются чаще всего в качестве хранилищ для пространств подкачки, их значения времени доступа к данным в сотни тысяч раз хуже соответствующих значений оперативной памяти.
Пространство подкачки может быть представлено файлом, разделом жесткого диска или комбинацией файлов и разделов жесткого диска. Вы можете получить информацию об используемых пространствах подкачки выполнив либо команду free
, либо команду cat /proc/swaps
.
paul@ubu1010:~$ free -o | grep -v Mem total used free shared buffers cached Swap: 6384636 84988 6299648 paul@ubu1010:~$ cat /proc/swaps Filename Type Size Used Priority /dev/sda3 partition 6384636 84988 -1
Необходимый объем пространства подкачки зависит главным образом от предназначения рассматриваемого компьютера.
18.2.2. Создание раздела подкачки
Вы можете активировать и деактивировать пространство подкачки с помощью утилит swapon
и swapoff
соответственно. Новое пространство подкачки может быть создано с помощью утилиты mkswap
. В приведенном ниже примере показан процесс создания и активации раздела подкачки.
root@RHELv4u4:~# fdisk -l 2> /dev/null | grep hda Disk /dev/hda: 536 MB, 536870912 bytes /dev/hda1 1 1040 524128+ 83 Linux root@RHELv4u4:~# mkswap /dev/hda1 Setting up swapspace version 1, size = 536702 kB root@RHELv4u4:~# swapon /dev/hda1
После выполнения описанных действий вы можете заметить, что в файле /proc/swaps
содержится информация о каждом из пространств подкачки по отдельности, а при использовании команды free -om
выводится только общая информация, отформатированная для более удобного чтения.
root@RHELv4u4:~# cat /proc/swaps Filename Type Size Used Priority /dev/mapper/VolGroup00-LogVol01 partition 1048568 0 -1 /dev/hda1 partition 524120 0 -2 root@RHELv4u4:~# free -om total used free shared buffers cached Mem: 249 245 4 0 125 54 Swap: 1 535 0 1535
18.2.3. Создание файла подкачки
Ниже приведен еще одни пример, иллюстрирующий процесс создания файла подкачки
. При работе с операционной системой Solaris вы можете использовать утилиту mkfile
вместо утилиты dd
.
root@RHELv4u4:~# dd if=/dev/zero of=/smallswapfile bs=1024 count=4096 4096+0 записей получено 4096+0 записей отправлено root@RHELv4u4:~# mkswap /smallswapfile Setting up swapspace version 1, size = 4190 kB root@RHELv4u4:~# swapon /smallswapfile root@RHELv4u4:~# cat /proc/swaps Filename Type Size Used Priority /dev/mapper/VolGroup00-LogVol01 partition 1048568 0 -1 /dev/hda1 partition 524120 0 -2 /smallswapfile file 4088 0 -3
18.2.4. Описание пространства подкачки в файле /etc/fstab
Если вы хотите использовать созданные пространства подкачки на постоянной основе, не забудьте добавить их описание в файл /etc/fstab
. Строки, которые следует добавить в данный файл, должны быть аналогичны приведенным ниже.
/dev/hda1 swap swap defaults 0 0 /smallswapfile swap swap defaults 0 0
18.3. Мониторинг использования памяти с помощью утилиты vmstat
Для получения информации об использовании пространства подкачки
может использоваться утилита vmstat
.
В примере ниже приведен вывод утилиты vmstat
с значениями в мегабайтах.
paul@ubu1010:~$ vmstat -S m procs ---------memory-------- ---swap-- -----io---- -system- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 87 225 46 2097 0 0 2 5 14 8 6 5 89 1
В следующем примере приведен вывод утилиты vmstat
после исполнения пользователем root (в другом терминале) команды find /
. Утилита find выполняет множество операций дискового ввода-вывода (в столбцах bi и bo расположены счетчики прочитанных и записанных блоков диска соответственно). В данных обстоятельствах нет повода для использования пространства подкачки.
paul@ubu1010:~$ vmstat 2 100 procs ----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 84984 1999436 53416 269536 0 0 2 5 2 10 6 5 89 1 0 0 84984 1999428 53416 269564 0 0 0 0 1713 2748 4 4 92 0 0 0 84984 1999552 53416 269564 0 0 0 0 1672 1838 4 6 90 0 0 0 84984 1999552 53424 269560 0 0 0 14 1587 2526 5 7 87 2 0 0 84984 1999180 53424 269580 0 0 0 100 1748 2193 4 6 91 0 1 0 84984 1997800 54508 269760 0 0 610 0 1836 3890 17 10 68 4 1 0 84984 1994620 55040 269748 0 0 250 168 1724 4365 19 17 56 9 0 1 84984 1978508 55292 269704 0 0 126 0 1957 2897 19 18 58 4 0 0 84984 1974608 58964 269784 0 0 1826 478 2605 4355 7 7 44 41 0 2 84984 1971260 62268 269728 0 0 1634 756 2257 3865 7 7 47 39
А в примере ниже представлен вывод утилиты vmstat
при исполнении (в дистрибутиве RHEL6) простой программы, повторяющей поведение приложения с утечкой памяти. Теперь вы можете обнаружить большое количество страниц памяти в пространстве подкачки (или "страниц памяти, перемещенных в пространство подкачки").
[paul@rhel6c ~]$ vmstat 2 100 procs ----------memory-------- ---swap-- ----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 3 245208 5280 232 1916 261 0 0 42 27 21 0 1 98 1 0 0 2 263372 4800 72 908 143840 128 0 1138 462 191 2 10 0 88 0 1 3 350672 4792 56 992 169280 256 0 1092 360 142 1 13 0 86 0 1 4 449584 4788 56 1024 95880 64 0 606 471 191 2 13 0 85 0 0 4 471968 4828 56 1140 44832 80 0 390 235 90 2 12 0 87 0 3 5 505960 4764 56 1136 68008 16 0 538 286 109 1 12 0 87 0
Для симуляции утечки памяти (и принудительного переноса страниц памяти в пространство подкачки) был использован приведенный ниже код. Этот код был найден в энциклопедии Wikipedia, причем имя автора не было указано.
paul@mac:~$ cat memleak.c #include <stdlib.h> int main(void) { while (malloc(50)); return 0; }
18.4. Практическое задание: память
-
1. Используйте утилиту
dmesg
для получения информации об общем объеме оперативной памяти вашего компьютера. -
2. Используйте утилиту
free
для вывода информации об использовании памяти с значениями в килобайтах (а после этого в мегабайтах). -
3. Работая с операционной системой, запущенной в виртуальной машине, создайте раздел подкачки (для этой цели вам может потребоваться дополнительный виртуальный диск).
-
4. Добавьте в систему файл подкачки размером в 20 мегабайт.
-
5. Разместите описания всех созданных пространств подкачки в файле
/etc/fstab
и активируйте их. Проверьте, монтируются ли они после перезагрузки системы. -
6. Используйте утилиту
free
для проверки использования созданных пространств подкачки. -
7 (дополнительное задание). Выведите информацию об использовании созданных пространств подкачки в условиях запуска приложения с утечкой памяти с помощью команд
vmstat
иfree -s
.
18.5. Корректная процедура выполнения практического задания: память
-
1. Используйте утилиту
dmesg
для получения информации об общем объеме оперативной памяти вашего компьютера. -
dmesg | grep Memory
-
2. Используйте утилиту
free
для вывода информации об использовании памяти с значениями в килобайтах (а после этого в мегабайтах). -
free ; free -m
-
3. Работая с операционной системой, запущенной в виртуальной машине, создайте раздел подкачки (для этой цели вам может потребоваться дополнительный виртуальный диск).
-
mkswap /dev/sdd1 ; swapon /dev/sdd1
-
4. Добавьте в систему файл подкачки размером в 20 мегабайт.
-
dd if=/dev/zero of=/swapfile20mb bs=1024 count=20000 mkswap /swapfile20mb swapon /swapfile20mb
-
5. Разместите описания всех созданных пространств подкачки в файле
/etc/fstab
и активируйте их. Проверьте, монтируются ли они после перезагрузки системы. -
root@computer# tail -2 /etc/fstab /dev/sdd1 swap swap defaults 0 0 /swapfile20mb swap swap defaults 0 0
-
6. Используйте утилиту
free
для проверки использования созданных пространств подкачки. -
free -om
-
7 (дополнительное задание). Выведите информацию об использовании созданных пространств подкачки в условиях запуска приложения с утечкой памяти с помощью команд
vmstat
иfree -s
.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 17. Журналирование событий | Глава 19. Мониторинг использования ресурсов системы |