Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 800521

.pdf
Скачиваний:
3
Добавлен:
01.05.2022
Размер:
4.21 Mб
Скачать

В последней строке выдаваемых данных показывается информация о размере памяти swap.

Таким образом, сам факт использования памяти swap не является доказательством того, что в системе при ее текущей рабочей нагрузке слишком мало оперативной памяти. Лучший

способ это определить с помощью команды vmstat :

 

 

 

:~$ vmstat 5 5

 

 

 

 

 

 

 

procs -----------memory---------- ---swap-- -----io---- -system-

- ------cpu-----

 

 

 

 

 

 

 

 

r

b swpd free

buff cache

si

so

bi

bo

in

cs

us sy id wa st

 

 

 

 

 

 

 

 

1

0 363456 181880

12200 427488

2

19

128 106

159

698

7 2 89 2 0

 

 

 

 

 

 

 

 

0

0 363456 180888

12200 427488

0

0

0

0

239

587

2 1 97 0 0

 

 

 

 

 

 

 

 

0

0 363456 180888

12200 427488

0

0

0

0

106

376

1

0 99 0 0

 

 

 

 

 

 

 

 

0

0 363456 179896

12200 427488

0

0

0

0

102

339

2 0 98 0 0

 

 

 

 

 

 

 

 

0

0 363456 179772

12200 427488

0

0

0

0

108

367

1 0 98 0 0

 

 

 

 

 

 

В том случае, когда много страниц памяти swap перемещаются на диск и обратно, это означает, что память swap используется активно, что система «пробуксовывает» и ей нужна новая оперативная память.

4.5.Кэширование памяти swap (Swap Cache)

Кэширование памяти swap похоже на страничное кэширование. Страница данных пользовательского приложения, записываемая на диск, похожа на страницу данных файла, находящуюся на диске. Каждый раз, когда страница считывается из файла подкачки («si» в vmstat), она помещается в кэш подкачки. Так же, как страничное

51

кэширование, все это выполняется ядром. Ядро решает, нужно ли вернуть обратно на диск конкретную страницу.

Кэширование памяти swap полезно только когда мы читаем данные из памяти swap и никогда в нее не делаем записи. Если мы выполняем запись на страницу, то копия на диске не будет соответствовать копии, находящейся в памяти. Несмотря на то, что затраты на сохранение всей страницы больше, чем затраты на запись небольшого измененного кусочка, система будет работать лучше.

Поэтому, чтобы узнать, что память swap действительно используется, из значения SwapUsed следует вычесть значение SwapCached. Данную информацию можно найти в

/proc/meminfo.

4.6.Подкачка памяти

Когда приложению нужна память, а вся оперативная память полностью занята, то в распоряжении ядра есть два способа освободить память: оно может либо уменьшить размер дискового кэша в оперативной памяти, убирая устаревшие данные, либо оно может сбросить на диск в swap раздел несколько достаточно редко используемых порций (страниц) программы. Трудно предсказать, какой из способов будет более эффективным. Ядро, исходя из недавней истории действий в системе, делает попытку приблизительно отгадать на данный момент эффективность каждого из этих двух методов.

Подкачке памяти назначается значение от 0 до 100, которое изменяет баланс между подкачкой памяти приложений и освобождением кэш памяти. При значении 100 ядро всегда предпочтет найти неактивные страницы и сбросить их на диск в раздел swap; в других случаях этот сброс будет осуществляться в зависимости от того, сколько памяти занимает приложение и насколько трудно выполнять кэширование при поиске и удалении неактивных элементов.

52

По умолчанию для этого устанавливается значение 60. Значение 0 дает нечто близкое к старому поведению, когда приложения, которым нужна память, заставляли немного уменьшить размер кэша оперативной памяти.

4.7.Лабораторная работа № 4

Цель работы: Понимать, как организовано кэширование в Linux, особенно в Ubuntu

Ход выполнения

1.Количество памяти (free)

free [-b | -k | -m] [-o] [-s delay ] [-t] [-V]

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

Опции:

●-b показывает количество памяти в байтах; опция -k (по умолчанию) поазывает количество пвмяти в килобайтах; Опция -m показывает количество памяти в мегабайтах.

●-t показывает строки содержащие полное количество памяти.

●-o запрещает показывать строки относящиеся к "массиву буфера" . Если не определено отнять/добавить память буферов из/в используемую/свободнуб память (соответственно!).

●-s

разрешает

безостановочно

выводить

информацию с промежутком в delay секунд.

 

●-V

показывает информацию о версии программы.

xfalcon@ubuntu:~$ free

 

 

53

total

 

used

free

shared buff/cache available

Mem:

2027048

990624

249372

11608

787052

819084

 

 

 

 

Swap:

2094076

 

4284 2089792

 

2. Список работающих процессов (top) top

Консольная команда UNIX-совместимых операционных систем, список работающих в данный момент процессов и информацию о них. Команда top показывает список работающих данный момент процессов и информацию о них, включая использование ими памяти и процессора. Список интерактивно формируется в реальном времени. Чтобы выйти из программы top, нажмите клавишу [q].

Рис. 4.1. Вывод команды top

3./PROC/MEMINFO

Простейший способ проверить использование оперативной памяти — посмотреть /proc/meminfo. Это автоматически обновляемый файл, который является источником для таких утилит как free, ps и top. Кроме количества свободной и использованной памяти в /proc/meminfo есть все что можно узнать о памяти. Информация о памяти для конкретного процесса находится по адресу /proc/pid/statm или /proc/pid/status.

54

Рис. 4.2. Cat /proc/meminfo

4. VMSTAT

Утилита командной строки vmstat отображает статистические данные по использованию CPU, памяти, прерываний и ввода вывода на диск. Команда показывает не только физическую память (всего, использовано, кэшировано, буферизировано), но и статистику по виртуальной памяти (количество страниц в подкачке и т д)

Рис. 4.3. Vmstat

55

4.8.Контрольные вопросы

1.Основные сведения Dentry/inode caches.

2.Buffer cache

3.Раздел памяти swap

4.Кэширование swap

5.Отображение команды top

6.Подкачка памяти

7.Страничный кэш

56

5. УПРАВЛЕНИЕ ПАРАМЕТРАМИ РАБОТЫ ЯДРА

5.1.Основные сведения

Linux позволяет настроить очень много параметров его ядра, в том числе прямо во время его работы. Это касается таких параметров как: особенности работы процессора, памяти, виртуального пространства памяти, планировщика ядра, сетевой стек и многое другое. Все эти настройки доступны через файловую систему proc.

В каталоге /proc/sys и его подкаталогах находятся файлы, это и есть параметры. Для редактирования параметров можно использовать самую простую конструкцию из команды echo и оператора перенаправления вывода:

echo "1" > /proc/sys/net/ipv4/ip_forward

Значение 1 будет записано в файл ipv4_forward. Но измененные таким способом параметры не сохраняются после перезагрузки. Перед тем как рассматривать как сохранить параметры ядра Linux из proc рассмотрим еще один способ их модификации.

Для работы с параметрами ядра используется утилита sysctl. Она представляет все параметры в виде переменных. Имена этих переменных соответствуют адресу файла в папке

/proc/sys. Например:

net.ipv4.ip_forward - перенаправление пакетов с одного сетевого интерфейса на другой.

Можно установить значение параметра такой командой: sysctl net.ipv4.ip_forward=1

Но это изменение тоже не сохранится, чтобы сохранить настройку после перезагрузки нужно добавить опцию -w:

sysctl -w net.ipv4.ip_forward=1

Есть возможность также сразу посмотреть все доступные переменные с помощью опции -a:

57

sysctl -a abi.vsyscall32 = 1

debug.exception-trace = 1 dev.cdrom.autoclose = 0 dev.cdrom.autoeject = 0 dev.cdrom.check_media = 0 dev.cdrom.debug = 0

...

vm.stat_interval = 1 vm.swappiness = 60 vm.user_reserve_kbytes = 131072 vm.vfs_cache_pressure = 100 vm.zone_reclaim_mode = 0

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

/run/sysctl.d/*.conf

/etc/sysctl.d/*.conf

/usr/local/lib/sysctl.d/*.conf

/usr/lib/sysctl.d/*.conf

/lib/sysctl.d/*.conf

/etc/sysctl.conf

Можно вручную добавлять переменные и их значения в эти файлы. Однако, если необходимо вернуть значения переменных до состояния, сохраненного в файлах и удалить свои изменения надо выполнить:

sysctl --system

*Applying /boot/sysctl.conf-4.1.21-14-default ...

kernel.hung_task_timeout_secs = 0 kernel.msgmax = 65536 kernel.msgmnb = 65536 kernel.shmmax = 0xffffffffffffffff

58

kernel.shmall = 0x0fffffffffffff00 vm.dirty_ratio = 20

Среди множества параметров ядра Linux рекомендуется обратить внимание на параметры:

VM.DIRTY_BACKGROUND_RATIO - указывает процент от общей системной памяти, когда фоновый демон pdflush записи данных начнет переписывать кешированные данные на диск. По умолчанию установлено 10, но в быстрых системах такое частое сбрасывание не нужно, поэтому этот параметр можно увеличить;

VM.DIRTY_RATIO - похожий параметр. Только на этот раз он указывает сколько общей оперативной памяти должно быть занято, чтобы процесс, который ведет запись данных на диск инициировал запись кэшированных данных непосредственно на жесткий диск;

VM.SWAPPINESS - устанавливает процент свободной памяти, по достижении которого данные начинают переноситься на swap раздел, для систем с большим количеством памяти рекомендовано значение 10, как наиболее часто используемые для тонкой настройки и оптимизации операционной системы.

5.2.Контрольные вопросы

1.Sysctl и все его параметы

2.Параметр VM.DIRTY_BACKGROUND_RATIO

3.Параметр VM.DIRTY_RATIO

4.Параметр VM.SWAPPINESS

59

6.БЕЗОПАСНОСТЬ ПРОЦЕССОВ

6.1.Разграничение прав доступа, пользователи

игруппы

В Linux каждому файлу соответствует набор прав доступа, представленный в виде 9-ти битов режима. Он определяет, какие пользователи имеют право читать файл, записывать в него данные или выполнять его. Вместе с другими тремя битами, влияющими на запуск исполняемых файлов, этот набор образует код режима доступа к файлу. Двенадцать битов режима хранятся в 16-битовом поле индексного дескриптора вместе с 4-мя дополнительными битами, определяющими тип файла. Последние 4 бита устанавливаются при создании файлов и не подлежат изменению. Биты режима (далее права) могут изменяться либо владельцем файла, либо суперпользователем с помощью команды chmod.

Существует три пути управления доступом к файлу или каталогу. Было определено, что каждый файл должен иметь владельца (owner), группового владельца (group owner), а также может потребоваться доступ для всех остальных пользователей (everyone). Эти названия обычно приводятся как пользователь/группа/остальные (user/group/others) или коротко ugo. Реализация управления доступом к файлам и каталогам в Unix позволяет или запрещает доступ по трем флагам: флаг чтения (Read), флаг записи (Write), флаг выполнения (eXecute). Они представляются следующим образом:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

flag

 

 

user

 

 

group

 

 

other

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#

 

 

 

rwx

rwx

 

 

rwx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

60