Как быстро выяснить какой процесс в 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} замените на номер процесса);
  • smem — утилита (скрипт python), которая поможет вывести информацию в более удобном виде;
  • Теперь идем на сервер и смотрим:

    [[email protected] ~]# 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
    
    [[email protected] ~]# 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

    top swap usage

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

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

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

    systemctl restart rsyslog
    

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

    [[email protected] ~]# 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, что вполне нас должно устроить на первое время.

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


    Оставить комментарий

    avatar
    1000

    Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

      Подписаться  
    Уведомление о