Лабораторна робота 8: Моніторинг системи та процесів¶
Завдання¶
Після виконання цієї лабораторної роботи ви зможете:
- переглядати та керувати процесами
- вбити помилкові процеси
- змінити пріоритет процесу
Приблизний час виконання цієї лабораторної роботи: 60 хвилин
Вступ¶
Ці вправи охоплюють різні теми, пов’язані з моніторингом та керуванням процесами в системах Linux. Розглянуті теми включають ідентифікацію та контроль процесів, керування пріоритетами процесів, обробку сигналів, моніторинг ресурсів та керування «cgroups».
Завдання 1¶
ps
і /proc дослідження¶
Щоб дослідити та ідентифікувати перший системний процес¶
Увійдіть в систему під будь-яким користувачем.
Знайдіть назву процесу з ідентифікатором процесу 1 за допомогою /proc.
cat /proc/1/comm
!!! question "Питання"
Як називається процес з PID 1?
- Перегляньте ім’я та шлях до виконуваного файлу процесу з PID 1.
ls -l /proc/1/exe
!!! question "Питання"
Який шлях до виконуваного файлу за PID 1?
- Використовуйте команду
ps
, щоб дізнатися назву процесу або програми, що стоїть за PID 1.
ps -p 1 -o comm=
!!! question "Питання"
Чи підтверджує команда `ps` назву процесу?
- Використовуйте команду
ps
, щоб переглянути повний шлях і будь-які аргументи командного рядка процесу або програми за PID 1.
ps -p 1 -o args=
!!! question "Питання"
Який повний шлях і аргументи командного рядка для процесу з PID 1?
!!! question "Питання"
Чому процес із PID 1 важливий у системі Linux?
Щоб відобразити детальну інформацію про процес за допомогою ps
¶
Наступні кроки показують, як використовувати ps
для відображення основної інформації про процес.
- Використовуйте команду
ps
, щоб відобразити список усіх процесів у структурі дерева.
ps auxf
!!! question "Питання"
Яка структура списку процесів і яка інформація відображається?
- Відфільтруйте список лише для відображення процесів, пов’язаних із певним користувачем, наприклад, користувачем «root».
ps -U root
Переконайтеся, що відображаються лише процеси для користувача root.
- Показуйте процеси в детальному форматі, включаючи дерево процесів і потоки. Впишіть:
ps -eH
!!! question "Питання"
Які додаткові деталі відображаються в цьому форматі?
- Відображати процеси, відсортовані за використанням ЦП у порядку спадання.
ps aux --sort=-%cpu
!!! question "Питання"
Який процес споживає найбільше ЦП?
Завдання 2¶
Керування процесами за допомогою kill
¶
Щоб завершити процес за допомогою kill
¶
- Запустіть тривалий процес сну у фоновому режимі та відобразіть PID на своєму терміналі. Впишіть:
(sleep 3600 & MYPROC1=$! && echo PID is: $MYPROC1) 2>/dev/null
Вихід
PID is: 1331933
Занотуйте PID для нового процесу у вашій системі. PID також зберігається в змінній $MYPROC1.
- Надішліть сигнал завершення (SIGTERM) процесу «сплячого режиму».
kill $MYPROC1
Замініть $MYPROC1 фактичним PID з кроку 1.
- Перевірте, чи було завершено процес за допомогою
ps
іps aux
.
ps aux | grep -v grep | grep sleep
Для завершення процесів за допомогою сигналів kill
¶
- Почніть новий процес сну та запишіть його PID. Впишіть:
(sleep 3600 & MYPROC2=$! && echo PID is: $MYPROC2) 2>/dev/null
Вихід
PID is: 1333258
- Надішліть інший сигнал (наприклад, SIGHUP) до нового процесу сну. Впишіть:
kill -1 $MYPROC2
Переконайтеся, що $MYPROC2 більше не міститься в таблиці процесів.
- Почніть новий процес ping і запишіть його PID. Впишіть:
{ ping localhost > /dev/null 2>&1 & MYPROC3=$!; } \
2>/dev/null; echo "PID is: $MYPROC3"
- Використовуйте команду
kill
, щоб надіслати сигналSIGTERM
процесу ping. Впишіть:
kill -15 $MYPROC3
Замініть MYPROC3 фактичним PID процесу у вашій системі.
- Запустіть тривалий процес за допомогою команди
cat
. Впишіть:
{ cat /dev/random > /dev/null 2>&1 & MYPROC4=$!; } \
2>/dev/null; echo PID is: $MYPROC4
Занотуйте PID для процесу у вашій системі.
- Використовуйте
kill
, щоб примусово завершити процес, надіславши сигнал SIGKILL.
kill -9 $MYPROC4
Підтвердьте, що процес завершено.
!!! question "Питання"
Поясніть мету надсилання сигналів процесам за допомогою команди `kill` і значення різних типів сигналів.
Завдання 3¶
Моніторинг системних ресурсів за допомогою top
¶
Для моніторингу використання системних ресурсів за допомогою top
¶
- Запустіть верхню команду, щоб переглянути системну статистику в реальному часі.
top
!!! question "Питання"
Яка інформація відображається у верхньому інтерфейсі?
- Спостерігайте за використанням процесора та пам’яті процесами у верхньому інтерфейсі.
!!! question "Питання"
Які процеси споживають найбільше процесора та пам’яті?
- Відсортуйте процеси вгорі за використанням ЦП (натисніть P) і використанням пам’яті (натисніть M).
!!! question "Питання"
Які процеси найбільше споживають процесор і пам’ять після сортування?
Щоб контролювати використання процесора та пам’яті певними процесами, використовуючи top
¶
- Створіть довільно великий файл розміром 512 МБ, який містить випадкові дані.
sudo fallocate -l 512M ~/large-file.data
- Почніть ресурсомісткий процес, наприклад значне стиснення файлу.
tar -czf archive.tar.gz /path/to/large/directory
- Відкрийте команду
top
, щоб контролювати використання ЦП і пам'яті.
top
- У верхньому інтерфейсі знайдіть і виберіть ресурсомісткий процес.
!!! question "Питання"
Який ідентифікатор процесу та використання ресурсів інтенсивного процесу?
- Змініть порядок сортування вгорі, щоб відобразити процеси, які використовують найбільше ЦП або пам’яті (натисніть P або M).
!!! question "Питання"
Який процес знаходиться у верхній частині списку після сортування?
- Вийдіть із верхньої частини, натиснувши
q
.
Для моніторингу процесів і використання ресурсів за допомогою top
¶
- Запустіть команду
top
в інтерактивному режимі.
top
!!! question "Питання"
Яка інформація відображається на верхньому екрані?
- Використовуйте одну клавішу, щоб відобразити підсумок використання окремого ядра ЦП.
!!! question "Питання"
Яка розбивка використання ядра ЦП для кожного ядра?
- Натисніть u, щоб відобразити процеси для певного користувача. Введіть своє ім'я користувача.
!!! question "Питання"
Які процеси зараз запущені для вашого користувача?
- Відсортуйте процеси за використанням пам’яті (натисніть M) і спостерігайте за процесами, які споживають найбільше пам’яті.
!!! question "Питання"
Які процеси використовують найбільше пам’яті?
- Вийдіть із верхньої частини, натиснувши q.
!!! question "Питання"
Поясніть значення моніторингу системних ресурсів за допомогою команди top і як це може допомогти у вирішенні проблем продуктивності.
Завдання 4¶
Зміна пріоритету процесу за допомогою nice
і renice
¶
Щоб налаштувати пріоритет процесу за допомогою nice
¶
- Запустіть процес із інтенсивним використанням процесора, який виконується з пріоритетом за замовчуванням/звичайним. Впишіть:
bash -c 'while true; do echo "Default priority: The PID is $$"; done'
Вихід
Default priority: The PID is 2185209
Default priority: The PID is 2185209
Default priority: The PID is 2185209
....<SNIP>...
З виведених даних значення PID у нашій системі зразка становить «2185209».
Значення PID у вашій системі буде іншим.
Зверніть увагу на те, що значення PID постійно відображається на екрані вашої системи.
- В іншому терміналі, використовуючи значення PID, перевірте пріоритет процесу за замовчуванням за допомогою
ps
. Впишіть:
ps -p <PID> -o ni
!!! question "Питання"
Який пріоритет процесу за замовчуванням (значення `nice`) запущеного процесу?
Використовуючи надрукований PID процесу, завершіть процес за допомогою команди
kill
.Використовуючи команду
nice
, перезапустіть подібний процес із нижчим значенням якості (тобто більш сприятливим для процесу АБО вищим пріоритетом). Використовуйтеnice
значення «-20». Впишіть:
nice -n -20 bash -c 'while true; do echo "High priority: The PID is $$"; done'
- Використовуючи ваше значення PID, перевірте пріоритет процесу за допомогою
ps.
Впишіть:
ps -p <PID> -o ni
!!! question "Питання"
Чи успішно встановлено пріоритет процесу?
Одночасно натисніть клавіші Ctrl+C на клавіатурі, щоб «закрити» новий процес з високим пріоритетом.
Знову використовуючи команду
nice
, перезапустіть інший процес, але цього разу з вищим значенням акуратності (тобто найменш сприятливим для процесу АБО нижчим пріоритетом). Використовуйтеnice
значення19
, впишіть:
nice -n 19 bash -c 'while true; do echo "Low priority: The PID is $$"; done'
Вихід
Low priority: The PID is 2180254
Low priority: The PID is 2180254
...<SNIP>...
- Перевірте настроюваний пріоритет процесу за допомогою
ps
. Впишіть:
ps -p <PID> -o ni
Одночасно натисніть клавіші Ctrl+C на клавіатурі, щоб припинити новий процес із низьким пріоритетом.
Поекспериментуйте зі зміною пріоритету різних процесів на вищі та нижчі значення та спостерігайте за впливом на використання ресурсів процесу.
Щоб налаштувати пріоритет запущеного процесу за допомогою renice
¶
- Розпочніть інтенсивний процес, наприклад тривалий математичний розрахунок за допомогою утиліти md5sum. Впишіть:
find / -path '/proc/*' -prune -o -type f -exec md5sum {} \; > /dev/null
- Використовуйте команду
ps
, щоб визначити PID попереднього процесуfind/md5sum
. Впишіть:
ps -C find -o pid=
Вихід
2577072
Вихідні дані показують, що значення PID у нашій системі зразка становить «2577072».
Значення PID у вашій системі буде іншим.
Занотуйте значення PID у вашій системі.
- Використовуйте команду
renice
, щоб змінити пріоритет запущеного процесуfind/md5sum
на нижче значення точності (наприклад, -10, вищий пріоритет). Впишіть:
renice -n -10 -p $(ps -C find -o pid=)
Вихід
<PID> (process ID) old priority 0, new priority -10
Замініть " !!! question "Питання" Вихід Замініть " !!! question "Питання" !!! question "Питання" Замініть " !!! question "Питання" !!! question "Питання" Ця вправа охоплює керування процесами за допомогою Призупиніть процес переднього плану, натиснувши Ctrl+Z на клавіатурі. Це повинно повернути вас до командної оболонки. Виведіть список призупинених завдань за допомогою команди !!! question "Питання" !!! question "Питання" !!! question "Питання" !!! question "Питання" Призупиніть запущений процес за допомогою Ctrl+Z. !!! question "Питання" Призупиніть запущений процес за допомогою Використовуйте команду !!! question "Питання" Введіть «Hello» у Призупиніть запущений сеанс редагування тексту Запустіть ще один окремий сеанс редактора Введіть зразок тексту «Hi inside foobar2.txt» під час 2-го сеансу vi. Призупиніть 2-й сеанс vi за допомогою Ctrl+Z. Покажіть статус усіх «задач» на поточному терміналі. Впишіть: Вихід Ви повинні мати принаймні дві роботи, перелічені у вашому виході. Число в 1-му стовпчику вихідних даних показує номери робіт - [1] і [2]. Знову призупиніть перший сеанс Відновіть та виведіть на передній план 2-й сеанс Припиніть обидва сеанси редагування Вихід Давайте виберемо зразок/поширений запущений процес, ідентифікатор процесу якого ми хочемо знайти. Ми будемо використовувати Використовуйте команду Зверніть увагу на ідентифікатор(и) процесу Замініть !!! question "Питання" !!! question "Питання" !!! question "Питання" !!! question "Питання" !!! question "Питання" !!! question "Питання" Використовуйте Переконайтеся, що всі процеси з назвою «firefox» завершено. !!! question "Питання" Ця вправа охоплює використання потужної команди Зауважте, що попередня команда завершується, та виконується нова команда. !!! question "Питання" !!! question "Питання" Як і !!! question "Питання" !!! question "Питання" Переконайтеся, що всі процеси з іменем "chrome" завершено. !!! question "Питання" !!! question "Питання" Замініть !!! question "Питання" !!! question "Питання" !!! question "Питання" Замініть !!! question "Питання" !!! question "Питання" !!! question "Питання" Author: Wale Soyinka Contributors: Steven Spencer, Ganna Zhyrnovafind/md5sum
за допомогою top
(або htop
). Впишіть:top -cp $(ps -C find -o pid=)
Чи отримує процес тепер більшу частку ресурсів ЦП?
find/md5sum
на вище значення nice
(наприклад, 10, нижчий пріоритет). Впишіть:renice -n 10 -p <PID>
2338530 (process ID) old priority -10, new priority 10
Поясніть, як команда `nice` використовується для налаштування пріоритетів процесів і як вона впливає на розподіл системних ресурсів.
find/md5sum
. Ви також можете використати команду kill
, щоб виконати те ж саме.Завдання 5¶
Ідентифікація процесів за допомогою
pgrep
¶Ідентифікація процесів за допомогою
pgrep
¶pgrep
, щоб визначити всі процеси, пов’язані з певною програмою чи службою, наприклад sshd
.pgrep sshd
Які ідентифікатори процесів `sshd`?
ps
. ps -p <PID1,PID2,...>
pgrep
, щоб ідентифікувати процеси з певною назвою, наприклад, "cron".pgrep cron
Чи існують процеси з назвою "cron"?
Поясніть різницю між використанням `ps` і `pgrep` для ідентифікації та керування процесами.
Завдання 6¶
Основні та фонові процеси¶
fg
і bg
Для керування фоновими та активними процесами за допомогою
bg
і fg
¶sleep
. Впишіть:sleep 300
jobs
. Впишіть:jobs
Який статус призупиненої роботи?
fg
.fg
Що відбувається, коли ви повертаєте роботу на перший план?
bg
.bg
Який зараз статус роботи?
Поясніть призначення активних і фонових процесів і як ними керують за допомогою команд `fg` і `bg`.
Щоб розпочати процес у фоновому режимі¶
&
може запускати процес, який негайно виконується у фоновому режимі. Наприклад, щоб запустити команду sleep
у фоновому режимі, введіть:sleep 300 &
jobs -l
Який статус процесу `sleep 300`?
fg
.fg
Для керування інтерактивними процесами за допомогою
bg
і fg
¶vi
, щоб створити та відредагувати зразок текстового файлу під назвою "foobar.txt". Впишіть:vi foobar1.txt
Ctrl
+ Z
.bg
, щоб перевести призупинений процес у фоновий режим.bg
Процес зараз працює у фоновому режимі?
foobar1.txt
у вашому редакторі vi
.vi
, натиснувши Ctrl+Z.vi
, щоб створити інший текстовий файл під назвою "foobar2.txt". Впишіть:vi foobar2.txt
jobs -l
[1]- 2977364 Stopped vi foobar1.txt
[2]+ 2977612 Stopped vi foobar2.txt
vi
, ввівши:fg %1
vi
за допомогою Ctrl+Z.vi
, ввівши:fg %2
vi
, надіславши сигнал KILL до обох завдань. Слідкуйте за командою kill
з командою jobs. Впишіть: kill -SIGKILL %1 %2 && jobs
[1]- Killed vi foobar1.txt
[2]+ Killed vi foobar2.txt
Завдання 7¶
Ідентифікація процесу за допомогою
pidof
¶Щоб знайти ідентифікатор процесу запущеної команди за допомогою
pidof
¶systemd
як наш приклад.pidof
, щоб знайти ідентифікатор процесу systemd
. Впишіть:pidof systemd
systemd
.ps
.ps -p <PID>
Поясніть різницю між `pgrep` і `pidof` для пошуку ідентифікатора процесу запущеної команди.
Завдання 8¶
Вивчення файлової системи /sys¶
Щоб дослідити файлову систему /sys¶
ls /sys
Яка інформація зберігається в каталозі /sys?
cd /sys/devices/system/cpu
ls
Яка інформація про ЦП доступна у файловій системі /sys?
Поясніть призначення файлової системи /sys в Linux і її роль в управлінні обладнанням і конфігурацією системи.
Завдання 9¶
Знищення процесів за назвою за допомогою
pkill
¶Щоб завершити процеси за назвою за допомогою
pkill
¶pkill firefox
Чи всі процеси з назвою "firefox" були припинені?
ps
. ps aux | grep firefox
Чи залишилися процеси з назвою "firefox"?
pkill
, щоб примусово припинити всі процеси з певним іменем.pkill -9 firefox
Яка різниця між використанням `kill` і `pkill` для завершення процесів за назвою?
Вправа 10¶
exec
.Керування процесом за допомогою
exec
¶Щоб замінити поточну оболонку іншою командою за допомогою
exec
¶bash
while true; do echo "Running..."; done
exec
. exec echo "This replaces the previous command."
ps
.ps aux | grep "while true"
Попередня команда все ще виконується?
Поясніть, як команда `exec` може замінити поточний процес оболонки на іншу команду.
Вправа 11¶
Керування процесом за допомогою
killall
¶kill
, killall
є командою для завершення процесів за назвою. Можна спостерігати певну подібність між використанням killall
, kill
і pkill
у завершенні процесу.Щоб завершити процеси за назвою за допомогою
killall
¶ killall chrome
Чи всі процеси з назвою "chrome" були припинені?
ps
. ps aux | grep chrome
Чи залишилися процеси з назвою "chrome"?
killall
, щоб примусово припинити всі процеси з певною назвою. killall -9 chrome
Чим `killall` відрізняється від `pkill` і `kill` при завершенні процесів за назвою?
Вправа 12¶
Керування
cgroups
¶Для керування процесами за допомогою
cgroups
¶cgroups
у вашій системі.cat /proc/cgroups
Які контролери `cgroup` доступні у вашій системі?
sudo mkdir -p /sys/fs/cgroup/cpu/mygroup
cgroup
.echo <PID> | sudo tee /sys/fs/cgroup/cpu/mygroup/cgroup.procs
cgroup
.cat /sys/fs/cgroup/cpu/mygroup/cgroup.procs
Чи вказаний процес у "mygroup" cgroup?
Поясніть концепцію «cgroups» у Linux і те, як вони можуть керувати та контролювати розподіл ресурсів для процесів.
Вправа 13¶
Керування процесами за допомогою
renice
¶Щоб налаштувати пріоритет запущеного процесу за допомогою
renice
¶ps
.ps -p <PID> -o ni
Який поточний пріоритет (значення nice) процесу?
renice
, щоб змінити пріоритет запущеного процесу (значення nice).renice <PRIORITY> -p <PID>
ps
.ps -p <PID> -o ni
Зараз пріоритет інший?
Що відбувається зі споживанням ресурсів процесом із різними значеннями nice?
Поясніть, як команда renice використовується для налаштування пріоритету запущених процесів і її вплив на використання ресурсів процесу.