🐹 CentOS 7: Как узнать что занимает оперативную память на сервере?

Содержание:

1. Задача.
2. Выполнение задачи.
3. Оригиналы источников информации.


На чем было опробовано:

  1. CentOS Linux release 7.9.2009 (Core).

1. Задача.

Задача: Что занимает оперативную память на сервере?

2. Выполнение задачи.

Для этого существует следующий скрипт, который можно запустить в bash консоли:

# ps axo rss,comm,pid | awk '{ proc_list[$2] += $1; } END { for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' | sort -n | tail -n 10 | sort -rn | awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}'

Ответ:

Разбираем, что он делает:

1. ps axo rss,comm,pid — выводит список всех процессов, указывая pid, само название процесса и потребление памяти rss. Если у вас работает, к примеру, php-fpm, то у него может быть сотни процессов, так что сама по себе эта команда малоинформативна, так как генерирует огромный список. Начинаем его обрабатывать.

2. awk '{ proc_list[$2] += $1; } END — в данном случае $2 это второй столбец (название процесса) списка, полученного из первой команды, $1 (rss) — первый. Таким образом мы создаем словарь из названий процессов и в этом словаре сразу же суммируем rss всех процессов с одним и тем же именем, то есть записываем примерно следующее:
proc_list = ( [php-fpm]=51224, [mysql]=31441 ) и так далее.

3. { for (proc in proc_list) { printf("%d\t%s\n", proc_list[proc],proc); }}' — заключительная часть обработки в awk, которая в цикле перебирает все названия процессов в словаре и выводит их по одному в каждой строке. В данном случае proc_list[proc] будет выводить rss процесса, proc — его название, конструкция "%d\t%s\n" определяет формат вывода: %d — десятичное число, \t — табуляция, %s — строка, \n — переход на новую строку.

4. | sort -n | tail -n 10 | sort -rn — это самая простая часть. Тут мы сначала сортируем предыдущий список по первому столбцу (rss) от меньшего к большему, потом оставляем только 10 последних значений (можете изменить, если вам надо больше), и делаем обратную сортировку, от большего к меньшему.

5. | awk '{$1/=1024;printf "%.0fMB\t",$1}{print $2}' — здесь мы просто причесываем вывод, деля rss на 1024, чтобы перевести в мегабайты и их же дописываем в конце. %.0f — округление до целого, \t — добавляет табуляцию. Можете это убрать, если вам не нужно.

Сохрани на память.

Часто бывает нужен, если работаешь в консоли.

3. Оригиналы источников информации.

  1. t.me «ServerAdmin.ru канал Telegram».