Анализ нагрузки на сервер

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

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

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

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

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

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

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

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

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

Использование памяти

Раздел «память» показывает информацию об использовании памяти системой. Строки, помеченные «Mem» и «Swap», показывают информацию об оперативной памяти и пространстве подкачки соответственно. Проще говоря, пространство подкачки является частью жесткого диска, который используется как ОЗУ. Когда использование ОЗУ становится почти полным, нечасто используемые области ОЗУ записываются в пространство подкачки и готовы для последующего извлечения при необходимости. Однако из-за медленного доступа к дискам слишком сильная зависимость от подкачки может снизить производительность системы.

Как и следовало ожидать, значения «total», «free» и «used» имеют свои обычные значения. Значение «util mem» — это объем памяти, который может быть выделен процессам без дополнительной замены.

Ядро Linux также пытается сократить время доступа к диску различными способами. Он поддерживает «дисковый кэш» в ОЗУ, где хранятся часто используемые области диска. Кроме того, записи на диск сохраняются в «дисковый буфер», и ядро ​​в конечном итоге записывает их на диск. Общая потребляемая ими память является значением «buff / cache». Это может звучать плохо, но на самом деле это не так — память, используемая кешем, будет выделяться процессам при необходимости.

Общая статистика

Удобная утилита dstat покажет общую статистику сервера в реальном времени:

apt-get install dstat
dstat

Увидим данные о системе с интервалом в одну секунду:

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  0   0  99   0   0   0| 873B   18k|   0     0 |   0     0 |  33    75 
  0   0 100   0   0   0|   0    48k| 640B 1550B|   0     0 |  31    80 
  0   0 100   0   0   0|   0     0 | 422B 1110B|   0     0 |  29    66 
  0   0 100   0   0   0|   0     0 | 590B 1110B|   0     0 |  32    70 
  1   0  99   0   0   0|   0     0 | 478B 1110B|   0     0 |  31    66 
  0   0 100   0   0   0|   0     0 | 814B 1110B|   0     0 |  34    63 
  0   0 100   0   0   0|   0     0 | 814B 1110B|   0     0 |  39    70 
  0   0 100   0   0   0|   0    20k| 814B 1110B|   0     0 |  40    75 

Внимание следует обратить на:

  • total-cpu-usage — загрузка процессора
  • dsk/total — загрузка диска
  • net/total — загрузка сети

Отображение памяти в команде top: VIRT, RES и SHR

Если вы запускаете команду top, то три строки будут описывать к использованию памяти. Вы должны понимать их значение с тем, чтобы понять, сколько памяти требуется вашему серверу.

VIRT является сокращением от virtual size of a process (виртуальный размер процесса) и представляет собой общий объем используемой памяти: памяти, отображаемой самой в себя (например, памяти видеокарты для сервера X), файлов на диске, которые отображаются в память (особенно это касается разделяемых библиотек) и памяти, разделяемой совместно с другими процессами. Значение VIRT указывает, сколько памяти в настоящий момент доступно программе.

RES является сокращением от resident size (размер резидентной части) и является точным указателем того, сколько в действительности потребляется процессом реальной физической памяти. (Что также соответствует значению, находящемуся непосредственно в колонке %MEM). Это значение практически всегда меньше, чем размер VIRT, т.к. большинство программ зависит от библиотеки C.

SHR показывает, какая величина от значения VIRT является в действительности разделяемой (по памяти или за счет использования библиотек). В случае библиотек, это не обязательно означает, что вся библиотека находится в резидентной памяти. Например, если программа использует только несколько функций библиотеки, то при отображении в память будет использована вся библиотека, что будет учтено в значениях VIRT и SHR, но, на самом деле, будет загружена часть библиотеки, содержащая используемые функции, и это будет учтено в значении RES.

Cached

Страничный кэш в системе Linux («Cached:» в meminfo) является в большинстве систем самым крупным потребителем памяти. Каждый раз, когда вы выполняете операцию чтения read () из файла, расположенного на диске, данные считываются в память и помещаются в страничный кэш. После того, как операция read() завершается, ядро может просто выбросить страницу памяти, так как она не используется. Однако, если вы второй раз выполняете операцию чтения той же самой части файла, данные будут считываться непосредственно из памяти и обращения к диску не будет. Это невероятно ускоряет работу и, поэтому, в Linux так интенсивно используется кэширование страниц: ставка делается на то, что если вы обратились к некоторой странице дисковой памяти, то вскоре вы обратитесь к ней снова.

Top: полезный, но не слишком удобный

Теперь понимаете, что я имел в виду? Этот скриншот — одномоментный снимок экрана, любезно предоставленный утилитой Ksnapshot, но сам по себе Top, если верить man-странице, позволяет динамически просматривать состояние работающей системы в режиме реального времени. Если бы я, вместо снимка, запустил утилиту видеозаписи рабочего стола, вы увидели бы, что вывод постоянно обновляется. Страница справки также сообщает, что отображение можно настраивать, и эти настройки можно сохранять между запусками. Кстати, интерактивна, хотя сразу и не скажешь. Когда запущена, вам нужно нажать клавишу , чтобы увидеть все доступные опции, а затем нажать любую другую клавишу, чтобы вернуться к основному выводу. С настройками по умолчанию, обновляется в режиме реального времени, что может слегка раздражать, если вы хотите подробнее рассмотреть конкретный системный процесс или то, какие ресурсы потребляет определённое приложение.

Вы можете изменить это, настроив интервал обновления (по умолчанию установлено пять секунд [в разных дистрибутивах это может различаться — прим.перев.]), для чего нажмите клавишу и в появившемся приглашении установите больший или меньший интервал. Нажатие на пробел отменит все настройки и обновит экран. Помимо отображаемого списка процессов, вы должны были заметить набор параметров в верхней части экрана. Среди этих обобщающих значений — средняя загрузка системы, статистика по использованию процессора и памяти. Вы можете включать и отключать отображение этих значений с помощью клавиш , и соответственно. Если вам интересно, что означают заголовки всех этих столбцов и как их переупорядочить, добавить или удалить любой из них, просто нажмите :

Приложив некоторые усилия, вы сможете добиться более удобного отображения, которое будет проще для восприятия и соответствовать именно вашим потребностям. Хотя по сравнению с (сокращение от Virtual Memory Statistics, статистика виртуальной памяти) определённо более болтлив:

Можно отметить одну замечательную функцию Vmstat — возможность снимать статистику каждые Х секунд заданное число раз, и затем завершать работу. Например, запуск приведёт к тому, что утилита обновится 6 раз через каждые 3 секунды, после чего завершится:

Довольно аккуратно. Но то, что вы видите здесь — это статистика виртуальной памяти, и вы напрасно будете здесь искать узкие места в работе приложений. Для этого вам всё же нужен , который, хотя и является в общем интерактивным, но не слишком интуитивен и прост для восприятия. Так что нам нужен Htop.

В то время как в вашей системе уже есть, Htop вам придётся скачать и установить с помощью менеджера пакетов вашего дисрибутива. Он доступен для всех основных версий GNU/Linux. Всё, что вам нужно знать, — это то, что он написан на языке Си и требует библиотеку
. Если вы используете менеджер пакетов Debian — (в т.ч. и для установки Htop), этот интерфейс вам будет знаком. В отличие от , с Htop пользователь может взаимодействовать как с помощью клавиатуры, так и мыши. Также он использует различные цвета. Всё это может сделать восприятие выводимой информации более простым:

Системное время, время работы и пользовательские сессии

В самом верхнем левом углу экрана (как отмечено на скриншоте выше) сверху отображается текущее время. Затем следует время безотказной работы системы, которое сообщает нам время, в течение которого система работала. Например, в нашем примере текущее время — «16:55:40», и система работает 86 дней.

Далее идет количество активных пользовательских сессий. В этом примере есть два активных пользовательских сеанса. Эти сеансы могут проводиться либо по TTY (физически в системе, либо через командную строку, либо в среде рабочего стола), либо по PTY (например, через окно эмулятора терминала или через SSH). Фактически, если вы войдете в систему Linux через среду рабочего стола, а затем запустите эмулятор терминала, вы обнаружите, что будет два активных сеанса.

Если вы хотите получить более подробную информацию об активных сеансах пользователя, используйте who команду.

Как искать в top

Вы можете выполнять поиск процессов и строк, содержащих определённое значение.

Для этого нажмите L (Shift+l), появится приглашение ввести слово для поиска. Поиск чувствителен к регистру. Нет ограничений на содержимое поисковой строки.

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

Для перехода к следующему совпадению поиска отправьте символ &.

Если активен поиск, top отключит подсветку столбцов, чтобы предотвратить смешение с результатами поиска. То есть x потеряет своё действие. Подсветка столбцов будет восстановлена при прекращении поиска. Для этого можно указать в качестве поисковой строки пустое значение.

Подкачка (swap)

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

Термином swap в UNIX-системах называют не только процесс перемещения страниц между физической памятью и диском, но и область диска, где хранятся страницы.

В Windows это называется «файл подкачки», он размещается, как правило, в корне диска — C:\pagefile.sys.

В UNIX-подобных системах в качестве swap используют:

  1. отдельные разделы жёсткого диска,
  2. swap-файлы.

Linux начиная с версии 2.6.x обещает, что swap-файлы будут работать так же быстро, как swap-разделы

Важно, что swap-файл должен храниться последовательно на нижележащей файловой системе, без фрагментации. Ядро использует методы прямого доступа, чтобы избежать оверхеда на файловую систему

swap-раздел по определению лишён фрагментации.

Узнать размер:

free
swapon -s
cat /proc/swaps

Рекомендуемый размер swap

Возникают дискуссии о том, каким лучше выставлять размер swap-раздела.

Старые классические рекомендации — использовать удвоенный размер физической памяти. Если у вас 32 ГБ RAM, то нужно ли выделять под swap все 64 ГБ диска? Чаще всего нет.

Кроме подкачки, swap используется для режима «засыпания» — hibernation. Если он используется на компьютере, то размер swap-раздела приходится выставлять больше размера физической RAM.

В документации к RedHat Linux на декабрь 2017 приводятся такие данные:

Amount of RAM in the system Recommended swap space Recommended swap space if allowing for hibernation
2GB of RAM or less 2 times the amount of RAM 3 times the amount of RAM
2GB to 8GB of RAM Equal to the amount of RAM 2 times the amount of RAM
8GB to 64GB of RAM At least 4 GB 1.5 times the amount of RAM
64GB of RAM or more At least 4 GB Hibernation not recommended

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

Потребление памяти

Суммарное распределение страниц памяти по сегментам процесса можно получить при помощи третьего набора столбцов (активировав его клавишами № команды top, как показано в листинге ниже. В столбце VIRT изображается суммарный объем (в килобайтах) всех страниц процесса, а в столбце RES — объем резидентных «страниц (находящихся в страничных кадрах оперативной памяти). В столбце SWAP указывается объем всех страниц, находящихся во вторичной памяти — как «анонимных» страниц, выгруженных в специальную область подкачки, так и «файловых» страниц, возможно, никогда не загружавшихся в оперативную память.

Столбцы CODE и DATA показывают объемы (в килобайтах) памяти,, выделенной, под сегменты кода и данных, а столбец SHR — объем резидентных страниц, которые используются (или могут быть использованы) совместно с другими процессами.

Распределение памяти по назначению

Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie

Cpu(s): 8.6%us, 2.4%sy, 0.0%ni, 88.6%id, 0.4%wa, 0.0%hi, 0.0%si, 0.0%si

Mem: 8192144k total, 7037720k used, 1154424k free, 238984k buffers

Swap: 4104188k total, 35376k used, 4068812k free, 4356372k cached

PID %МЕМ   VIRT  SWAP  RES  CODE  DATA  SHR nFLT nDRT  S  PR   NI %CPU  COMMAND

26958         0.1   10288 4936    5352  880     3852     1544        0         0   S   20   0          0    bash

Механизм отображения считывает содержимое файла в страничные кадры только один раз, вне зависимости от количества процессов, отображающих этот файл в свою память. В случае отображения одного файла разными процессами их страницы совместно отображаются на одни и те же страничные кадры, за исключением страниц, скопированных (согласно принципу COW) при изменении.

Такое поведение механизма отображения позволяет эффективно использовать оперативную память за счет использования разными программами одинаковых разделяемых библиотек. Так как ELF-файлы библиотек «загружаются* в память процессов при помощи отображения mmap, то в результате каждая библиотека размещается в оперативной памяти лишь единожды, вне зависимости от количества ее «использований».

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

Статистика использования памяти

Строка Mem: содержит статистику использования оперативной памяти, а строка Swap: — статистику специальной области подкачки. В столбце total указан суммарный объем всех доступных страничных кадров, а в столбцах used и free — суммарные объемы использованных и свободных страничных кадров, соответственно.

В столбце cached указан объем страничного кэша (page cache), т. е. суммарный объем страничных кадров оперативной памяти, использованных под отображение файлов в память. Аналогично, в столбце buffers указывается объем буферного кэша, т. е. суммарный объем памяти, использованной ядром для кэширования «не-отображаемых» сущностей: метаданных файлов, дисковых блоков при прямом вводе-выводе на устройства и пр.

В столбцах used и free строки -/+ buffers/cache указываются объемы использованной и свободной памяти «за вычетом» страничного и буферного кэшей, т. е. «чистая» память, выделенная процессам по требованию под данные, сгенерированные в процессе работы.

В листинге ниже показан пример потребления памяти процессом текстового редактора vi при попытке редактирования громадного файла в 1 Гбайт. Процесс загружает файл целиком, в результате чего он целиком оказывается в резидентных страницах сегмента данных процесса, что естественным образом увеличивает «чистый» расход оперативной памяти системы. После принудительного завершения процесса при помощи команды kill память естественным образом высвобождается.

Потребление памяти процессами

pts/0

262144+0 записей получено

262144+0 записей отправлено

скопировано 1073741824 байта (1,1 GВ), 148,956 с, 7,2 МВ/с

-rw-r—r— 1   fitz fttz 1,0G дек. 3 12:26 big

pts/1

PID     TTY            STAT    TIME    COMMAND
20595     pts/1          S            0:00     -bash
21087     pts/1          R+         0:00      \_ ps f
20437     pts/0         S            0:00      -bash
21085     pts/0         Rl+        0:08        \_ vi big

total           used           free          shared        buffers           cached

Mem:                  8000           5687         2312                    0                42           2709
-/+ buffers/cache:                2935         5065
Swap:                 4007                   0        4007

top — 21:14:43 up 3:56, 3 users, load average: 0.53, 0.40, 0.47

Tasks:        1 total,        0 running,      1 sleeping,      0 stopped,    0 zombie

Cpu(s): 6.0%us, 5.89%sy, 0.2%ni, 83.7%id, 4.3%wa, 0.0%hi, 0.0%si, 0.0%st

Mem: 8192144k total,      5826856k used,      2365288k free,    43932k buffers

Swap:    4104188k total,    0k used,    4104188k free,   2777504k cached

PID %МЕМ   VIRT  SWAP  RES  CODE  DATA  SHR nFLT nDRT  S  PR   NI %CPU  COMMAND

21085      21.8    1783m   39m   1.7g    2148     1.7g    5676         0         0   S  20    0           0   vi

total           used           free          shared        buffers           cached

Mem:                  8000          3945         4054                    0               42           2709
-/+ buffers/cache:                1193          6806
Swap:                 4007                 0           4007

Как просмотреть, какая программа потребляет больше всего оперативной памяти в top

Очень подробно о команде top, в том числе подсказки и интересные трюки описаны в статье «Как пользоваться командой top для наблюдения за процессами в Linux» — крайне рекомендуется ознакомиться.

Запуск программы top:

top

По умолчанию программа top сортирует процессы по их нагрузке на центральный процессор. Чтобы посмотреть, по какому полю выполняется сортировка, нажмите клавишу x:

По умолчанию в top отображаются следующие виды памяти:

  • VIRT — общее количество используемой задачей виртуальной памяти, включает все коды, данные, совместные библиотеки, плюс страницы, которые были перенесены в раздел подкачки, и страницы, которые были размечены, но не используются
  • RES — используемая оперативная память, является подмножеством VIRT, представляет физическую память, не помещённую в раздел подкачки, которую в текущий момент использует задача. Также является суммой полей RSan, RSfd и Rssh.
  • SHR — размер совместной памяти, подмножество используемой памяти RES, которая может использоваться другими процессами
  • %MEM — доля задачи в использовании памяти (RES)

Для переключения между полями сортировки, используйте

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

Пример сортировки по %MEM:

Сортировка по VIRT:

Page faults

Page fault («отказ страницы») — разновидность аппаратного исключения, возникающего в момент обращения к странице памяти, которая не включена блоком управления памятью (MMU) в виртуальное адресное пространство процесса. Обращение к этой странице может быть логически допустимым, но требовать её добавления в таблицу страниц и, возможно, загрузки её содержимого из вторичного хранилища (жёсткого диска) в оперативную память. Обнаружение page fault выполняет аппаратное обеспечение (MMU), а его обработку выполняет программное обеспечение, являющееся частью ядра операционной системы. При обработке отказа страницы операционная система пытается поместить требуемую страницу в оперативную память и сделать доступной процессу, либо завершает программу в случае недопустимого обращения к памяти.

Несмотря на название, page faults являются нормальной частью функционирования любой операционной системы, использующей виртуальную память, включая Windows и UNIX-подобные системы.

Minor page fault

Означает, что требуемая страница либо уже находится в оперативной памяти, но не отмечена в блоке управления памятью как загруженная, либо она вновь выделена и ещё ни разу не использовалась. Обработчик исключения в операционной системе должен только добавить запись в таблицу страниц для требуемой страницы и указать, что она загружена в память. Загрузка страницы с диска не требуется.

Minor page fault происходит в таких случаях:

  • страница присутствует в памяти, но включена в рабочий набор другого процесса (например, если несколько процессов взаимодействуют через разделяемую память),
  • страница находится в промежуточном состоянии, потому что она либо была исключена из рабочих наборов всех процессов и ожидает записи на диск, либо была предзагружена ранее (ядро предсказало, что она понадобится),
  • процесс обращается к вновь выделенной странице в первый раз.

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

Major page fault

Основной механизм, используемый операционной системой для выделения программам памяти по их запросу. Операционная система откладывает загрузку частей программы с диска до тех пор, пока программа не попытается получить доступ к ним и тем самым сгенерирует отказ страницы. Если страница не загружена в память на момент отказа, тогда отказ называется мажорным. Обработчик page fault в ОС должен найти свободное место в оперативной памяти: свободную либо занятую страницу. Занятая страница может принадлежать другому процессу. В этом случае операционная система должна выгрузить данные этой страницы на диск (если они не были выгружены ранее) и пометить эту страницу в таблице страниц процесса как отсутствующую в памяти. Как только свободное место становится доступным, операционная система может загрузить данные для новой страницы в память, добавить её физический адрес в таблицу страниц исходного процесса и пометить страницу, как находящуюся в памяти. Необходимость обращения к диску делает обработку таких отказов гораздо более медленной по сравнению с лёгкими.

Invalid page fault

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

Как быстро выяснить какой процесс в Linux использует пространство подкачки (swap)

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

Подробности ниже…

Исходные данные: ОС Oracle Linux 7;Задач: Найти потребителя SWAP

Типичная ситуация на сервере с системой мониторинга — это аларм вида: prod-srv-01 Low free swap space (free: 0.15 %, threshold: 10%, alert started: 8.79 %)

Вначале немного теории, о том как получить информацию о распределении памяти процессами в Linux.

/proc/meminfo — псевдо-файл который сообщает статистику об использовании памяти в системе. Вы также можете использовать утилиты free, vmstat и другие инструменты, чтобы узнать ту же информацию;
/proc/${PID}/smaps, /proc/${PID}/status и /proc/${PID}/stat — используйте эти псевдо-файлы для поиска информации о потреблении памяти каждым процессом (${PID} замените на номер процесса);

— утилита (скрипт python), которая поможет вывести информацию в более удобном виде;

Теперь идем на сервер и смотрим:

 ~]# free  -h
              total        used        free      shared  buff/cache   available
Mem:            15G        2.9G        168M        5.6G         12G        6.8G
Swap:          5.0G        5.0G          0B

 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0 5242876 177632   5664 12976844    0    0  1102   189    0    0 21  2 70  7  0

Мы видим, что swap заполнен на 100% — это плохо.

Попробуем быстро выяснить кто основной потребитель, для этого обратимся к /proc/*/status Ниже простой сценарий на bash который выдаст нам список потребителей swap:

for file in /proc/*/status ; do awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 2 -n -r | less

Результат будет длинным, я покажу только TOP потребителей:

top swap usage

Мы видим, что основной потребитель — это процесс ora_j001_bs. На сервере установлен Oracle и один из процессов потребляет swap. На втором месте мы видим процесс rsyslogd — думаю он в представлении не нуждается.

Если на потребителя №1 мы не можем повлиять быстро, то на потребителя №2 (rsyslogd) можем — это попытаться его перазапустить.

Выполняем перезапуск rsyslogd:

systemctl restart rsyslog

И смотрим состояние swap:

 ~]# free  -h
              total        used        free      shared  buff/cache   available
Mem:            15G        2.8G        301M        5.6G         12G        6.9G
Swap:          5.0G        3.4G        1.6G

Мы видим, что стало доступно 1.6 GB, а это уже более 30% от размера swap, что вполне нас должно устроить на первое время.

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: