Мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя -- LFCS часть 14

Мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя — LFCS часть 14

LFCS

Сегодня расскажем, как осуществляется мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя — LFCS часть 14. Каждый системный администратор Linux должен знать, как проверить целостность и доступность оборудования, ресурсов и ключевых процессов. Кроме того, установка ограничений ресурсов для каждого пользователя также является обязательной частью набора навыков.

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

 

 

Статистика процессоров Linux

С помощью mpstat вы можете просматривать информацию о каждом процессоре по отдельности или о системе в целом, как в виде одноразового моментального снимка, так и динамически.

Чтобы использовать этот инструмент, вам необходимо установить sysstat:

# yum update && yum install sysstat [On CentOS based systems]
# aptitutde update && aptitude install sysstat [On Ubuntu based systems]
# zypper update && zypper install sysstat [On openSUSE systems]

 

После того, как вы установили mpstat, используйте его для создания отчетов по статистике процессоров.

Чтобы отобразить 3 глобальных отчета об использовании ЦП (-u) для всех ЦП (как указано -P ALL) с интервалом в 2 секунды, выполните:

# mpstat -P ALL -u 2 3

 

 

Образец вывода:
Linux 3.19.0-32-generic (tecmint.com) Wednesday 30 March 2016 _x86_64_ (4 CPU)
11:41:07 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:09 IST all 5.85 0.00 1.12 0.12 0.00 0.00 0.00 0.00 0.00 92.91
11:41:09 IST 0 4.48 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 94.53
11:41:09 IST 1 2.50 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 97.00
11:41:09 IST 2 6.44 0.00 0.99 0.00 0.00 0.00 0.00 0.00 0.00 92.57
11:41:09 IST 3 10.45 0.00 1.99 0.00 0.00 0.00 0.00 0.00 0.00 87.56
11:41:09 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:11 IST all 11.60 0.12 1.12 0.50 0.00 0.00 0.00 0.00 0.00 86.66
11:41:11 IST 0 10.50 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 88.50
11:41:11 IST 1 14.36 0.00 1.49 2.48 0.00 0.00 0.00 0.00 0.00 81.68
11:41:11 IST 2 2.00 0.50 1.00 0.00 0.00 0.00 0.00 0.00 0.00 96.50
11:41:11 IST 3 19.40 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 79.60
11:41:11 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:41:13 IST all 5.69 0.00 1.24 0.00 0.00 0.00 0.00 0.00 0.00 93.07
11:41:13 IST 0 2.97 0.00 1.49 0.00 0.00 0.00 0.00 0.00 0.00 95.54
11:41:13 IST 1 10.78 0.00 1.47 0.00 0.00 0.00 0.00 0.00 0.00 87.75
11:41:13 IST 2 2.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
11:41:13 IST 3 6.93 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 92.57
Average: CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
Average: all 7.71 0.04 1.16 0.21 0.00 0.00 0.00 0.00 0.00 90.89
Average: 0 5.97 0.00 1.16 0.00 0.00 0.00 0.00 0.00 0.00 92.87
Average: 1 9.24 0.00 1.16 0.83 0.00 0.00 0.00 0.00 0.00 88.78
Average: 2 3.49 0.17 1.00 0.00 0.00 0.00 0.00 0.00 0.00 95.35
Average: 3 12.25 0.00 1.16 0.00 0.00 0.00 0.00 0.00 0.00 86.59

 

Чтобы просмотреть ту же статистику для конкретного ЦП (CPU 0 в следующем примере), используйте:

# mpstat -P 0 -u 2 3

 

 

Образец вывода:
Linux 3.19.0-32-generic (tecmint.com) Wednesday 30 March 2016 _x86_64_ (4 CPU)
11:42:08 IST CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:42:10 IST 0 3.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 96.50
11:42:12 IST 0 4.08 0.00 0.00 2.55 0.00 0.00 0.00 0.00 0.00 93.37
11:42:14 IST 0 9.74 0.00 0.51 0.00 0.00 0.00 0.00 0.00 0.00 89.74
Average: 0 5.58 0.00 0.34 0.85 0.00 0.00 0.00 0.00 0.00 93.23

 

Разберём подробнее вывод выше приведенных команд по столбцам:

  • CPU: номер процессора.
  • % usr: процент использования процессора во время работы приложений уровня пользователя.
  • % nice: то же, что и % usr, но с большим приоритетом.
  • % sys: процент загрузки процессора, который происходит при выполнении приложений ядра. Этот параметр не включает время, затрачиваемое на прерывания или обработку аппаратного обеспечения.
  • % iowait: процент времени, когда данный CPU (или все) был бездействующим, в течение которого была запланирована ресурсоемкая операция ввода-вывода на этом CPU. Более подробное объяснение (с примерами) можно найти здесь.
  • % irq: процент времени, затрачиваемого на обслуживание аппаратных прерываний.
  • % soft: то же, что и % irq, но с программными прерываниями.
  • % steal: процент времени, проведенного в непроизвольном ожидании, когда виртуальная машина, как гостевая, «забирает» внимание гипервизора, конкурируя за процессор(ы). Это значение должно быть как можно меньше. Высокое значение в этом поле означает, что виртуальная машина задерживает работу системы.
  • % guest: процент времени, затрачиваемого на запуск виртуального процессора.
  • % idle: процент времени, когда CPU не выполняли никаких задач. Если вы наблюдаете низкое значение в этом столбце, это указывает на то, что система находится под большой нагрузкой. В этом случае вам нужно будет более внимательно изучить список процессов (как это сделать мы обсудим через минуту), чтобы определить, чем это вызвано.

 

Чтобы максимально нагрузить процессор, выполните следующие команды, а затем выполните mpstat (как показано ниже) в отдельном терминале:

# dd if=/dev/zero of=test.iso bs=1G count=1
# mpstat -u -P 0 2 3
# ping -f localhost # Interrupt with Ctrl + C after mpstat below completes
# mpstat -u -P 0 2 3

 

Наконец, сравните с выводом mpstat при «нормальных» обстоятельствах:

 

Мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя -- LFCS часть 14

 

 

Как видно на скриншоте выше, CPU 0 находился под большой нагрузкой во время первых двух примеров, это указано в столбце % idle.

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

 

 

Отчеты о процессах Linux

Чтобы просмотреть процессы, отсортированные по использованию ЦП, мы будем использовать известную вам команду ps с параметром -eo (для выбора всех процессов пользовательского формата) и -sort (для указания порядка пользовательской сортировки), например:

# ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu

 

Вышеприведенная команда будет показывать только PID, PPID, команду связанную с процессом, и процент использования процессора и ОЗУ, отсортированные по проценту использования ЦП в порядке убывания. , Вот первые несколько строк вывода, во время создания файла .iso:

 

Find-Linux-Processes-By-CPU-Usage

 

 

Как только мы определили интересующий вас процесс (например, с PID = 2822), в этом случае мы можем перейти к /proc/PID (/proc/2822) и вывести список каталогов.

Этот каталог содержит несколько файлов и подкаталогов с подробной информацией об этом конкретном процессе, которые сохраняются во время работы.

Например:
  • /proc/2822/io содержит статистику IO для процесса (количество символов и байтов, считанных и записанных, в частности, во время операций ввода-вывода).
  • /proc/2822/attr/current отображает текущие атрибуты безопасности SELinux для процесса.
  • /proc/2822/cgroup описывает управляющие группы, к которым принадлежит процесс, если включена опция конфигурации ядра CONFIG_CGROUPS, которую вы можете проверить с помощью:
# cat /boot/config-$(uname -r) | grep -i cgroups

 

Если опция включена, вы должны увидеть:

CONFIG_CGROUPS=y

 

Используя группы, вы можете управлять объемом разрешенного использования ресурсов на основе каждого процесса, как описано в главах с 1 по 4 руководства по управлению ресурсами Red Hat Enterprise Linux 7, а также в главе 9 руководства по системному анализу и настройке openSUSE.

/proc/2822/fd — это каталог, который содержит одну символическую ссылку для каждого дескриптора файла, который открыл процесс. На следующем скриншоте показана эта информация для ограничения процесса, который был запущен в tty1 (первый терминал), чтобы создать образ .iso:

 

Мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя -- LFCS часть 14

 

 

На приведенном выше скриншоте показано, что stdin (файловый дескриптор 0), stdout (дескриптор файла 1) и stderr (дескриптор файла 2) отображаются соответственно /dev/zero, /root/test.iso и /dev/tty1.

Более подробную информацию о /proc можно найти в документе «Документация файловой системы /proc», хранящемся и поддерживаемом Kernel.org, а также в Руководстве программиста Linux.

 

 

Установка лимитов ресурсов для пользователей в Linux

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

Для этого отредактируйте файл /etc/security/limits.conf и добавьте следующую строку в нижней части файла, чтобы установить ограничение:

* hard nproc 10

 

Первое поле может использоваться для обозначения пользователя или группы (*), тогда как второе поле принудительно устанавливает ограничение на количество процессов (nproc) до 10. Чтобы применить изменения, выйдите  из системы и зайдите обратно, этого будет достаточно.

Таким образом, давайте посмотрим, что произойдет, если какой-либо пользователь, не root, попытается запустить fork-бомбу (вредоносная или ошибочно написанная программа, создающая цыкл). Если бы мы не применили ограничения, сначала это запустило бы два экземпляра функции, а затем дублировало бы каждый из них в бесконечном цикле. Таким образом, это в конечном итоге привело бы вашу систему к выходу из строя.

Однако, с указанным выше ограничением, fork-бомба не страшна, но пользователь все равно будет заблокирован до тех пор, пока системный администратор не убьет связанный с ним процесс:

 

Run-Shell-Fork-Bomb

 

 

СОВЕТ. Другие возможные ограничения, сделанные ulimit, задокументированы в файле limits.conf.

 

 

Другие инструменты Linux для управления процессами

В дополнение к инструментам, обсуждавшимся ранее, системному администратору также может потребоваться:

a) Изменить приоритет выполнения (использование системных ресурсов) процесса, используя renice. Это означает, что ядро ​​будет выделять больше или меньше системных ресурсов для ограничения процесса на основе назначенного приоритета (число, обычно известное как «nice» в диапазоне от -20 до 19).

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

Основной синтаксис renice выглядит следующим образом:

# renice [-n] <new priority> <UID, GID, PGID, or empty> identifier

 

Если аргумент после нового значения приоритета отсутствует, по умолчанию он установлен в значение PID. В этом случае для ограничения процесса с идентификатором PID устанавливается значение <новый приоритет>.

б) Прервать выполнение процесса. Этот процесс обычно называют «kill». Это означает, что процессу посылается сигнал, чтобы закончить его выполнение должным образом и освободить любые использованные им ресурсы.

Чтобы завершить процесс, используйте команду kill следующим образом:

# kill PID

 

Кроме того, вы можете использовать pkill для завершения всех процессов данного пользователя (-u) или владельца группы (-G) или даже тех процессов, у которых есть общий идентификатор PPID (-P). За этими параметрами может следовать числовое представление или фактическое имя в качестве идентификатора:

# pkill [options] identifier

 

Например:

# pkill -G 1000

 

Данная команда завершит все процессы, принадлежащие группе  GID = 1000.

А команда:

# pkill -P 4993

 

будет завершать все процессы, PPID которых 4993.

Прежде чем запускать pkill, рекомендуется сначала проверить результаты с помощью pgrep, используя опцию -l, а также просмотреть имена процессов. Команда pgrep принимает те же параметры, но возвращает только PID процессов (без каких-либо дальнейших действий), которые могут завершить процессы, так как если используется pkill.

# pgrep -l -u gacanepa

 

Пример такого выполнения показан на следующем скриншоте:

 

Мониторинг использования ресурсов Linux и использование ограничений процесса для каждого пользователя -- LFCS часть 14

 

 

Итоги

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

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

Мы надеемся, что концепции, объясненные в этой статье, были полезны для вас.

 

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасностиполный курс по кибербезопасности от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.
Что Вы получите?
  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
А еще поможем Вам:
  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.
LFCS

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Самое читаемое
Меню