Лабораторна робота 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
Замініть "
- Контролюйте використання ресурсів для процесу
find/md5sum
за допомогоюtop
(абоhtop
). Впишіть:
top -cp $(ps -C find -o pid=)
!!! question "Питання"
Чи отримує процес тепер більшу частку ресурсів ЦП?
- Змініть пріоритет процесу
find/md5sum
на вище значенняnice
(наприклад, 10, нижчий пріоритет). Впишіть:
renice -n 10 -p <PID>
Вихід
2338530 (process ID) old priority -10, new priority 10
Замініть "
!!! question "Питання"
Поясніть, як команда `nice` використовується для налаштування пріоритетів процесів і як вона впливає на розподіл системних ресурсів.
- Одночасно натисніть клавіші Ctrl+C на клавіатурі, щоб зупинити процес
find/md5sum
. Ви також можете використати командуkill
, щоб виконати те ж саме.
Завдання 5¶
Ідентифікація процесів за допомогою pgrep
¶
Ідентифікація процесів за допомогою pgrep
¶
- Використовуйте команду
pgrep
, щоб визначити всі процеси, пов’язані з певною програмою чи службою, наприкладsshd
.
pgrep sshd
!!! question "Питання"
Які ідентифікатори процесів `sshd`?
- Перевірте існування ідентифікованих процесів за допомогою команди
ps
.
ps -p <PID1,PID2,...>
Замініть "\
- Використовуйте команду
pgrep
, щоб ідентифікувати процеси з певною назвою, наприклад, "cron".
pgrep cron
!!! question "Питання"
Чи існують процеси з назвою "cron"?
!!! question "Питання"
Поясніть різницю між використанням `ps` і `pgrep` для ідентифікації та керування процесами.
Завдання 6¶
Основні та фонові процеси¶
Ця вправа охоплює керування процесами за допомогою fg
і bg
Для керування фоновими та активними процесами за допомогою bg
і fg
¶
- Почніть довготривалий процес на передньому плані. Наприклад, ви можете використати просту команду на зразок
sleep
. Впишіть:
sleep 300
-
Призупиніть процес переднього плану, натиснувши Ctrl+Z на клавіатурі. Це повинно повернути вас до командної оболонки.
-
Виведіть список призупинених завдань за допомогою команди
jobs
. Впишіть:
jobs
!!! question "Питання"
Який статус призупиненої роботи?
- Поверніть призупинене завдання на передній план за допомогою команди
fg
.
fg
!!! question "Питання"
Що відбувається, коли ви повертаєте роботу на перший план?
- Знову призупиніть роботу за допомогою Ctrl+Z, а потім перемістіть її у фоновий режим за допомогою команди
bg
.
bg
!!! question "Питання"
Який зараз статус роботи?
!!! question "Питання"
Поясніть призначення активних і фонових процесів і як ними керують за допомогою команд `fg` і `bg`.
Щоб розпочати процес у фоновому режимі¶
- Символ
&
може запускати процес, який негайно виконується у фоновому режимі. Наприклад, щоб запустити командуsleep
у фоновому режимі, введіть:
sleep 300 &
Призупиніть запущений процес за допомогою Ctrl+Z.
- Список статусів усіх активних завдань. Впишіть:
jobs -l
!!! question "Питання"
Який статус процесу `sleep 300`?
- Поверніть фоновий процес на передній план за допомогою команди
fg
.
fg
- Передчасно завершити процес «сплячого режиму», надіславши йому сигнал SIGSTOP, натиснувши Ctrl+C.
Для керування інтерактивними процесами за допомогою bg
і fg
¶
- Запустіть інтерактивний процес, наприклад текстовий редактор
vi
, щоб створити та відредагувати зразок текстового файлу під назвою "foobar.txt". Впишіть:
vi foobar1.txt
Призупиніть запущений процес за допомогою Ctrl
+ Z
.
Використовуйте команду bg
, щоб перевести призупинений процес у фоновий режим.
bg
!!! question "Питання"
Процес зараз працює у фоновому режимі?
-
Введіть «Hello» у
foobar1.txt
у вашому редакторіvi
. -
Призупиніть запущений сеанс редагування тексту
vi
, натиснувши Ctrl+Z. -
Запустіть ще один окремий сеанс редактора
vi
, щоб створити інший текстовий файл під назвою "foobar2.txt". Впишіть:
vi foobar2.txt
-
Введіть зразок тексту «Hi inside foobar2.txt» під час 2-го сеансу vi.
-
Призупиніть 2-й сеанс vi за допомогою Ctrl+Z.
-
Покажіть статус усіх «задач» на поточному терміналі. Впишіть:
jobs -l
Вихід
[1]- 2977364 Stopped vi foobar1.txt
[2]+ 2977612 Stopped vi foobar2.txt
Ви повинні мати принаймні дві роботи, перелічені у вашому виході. Число в 1-му стовпчику вихідних даних показує номери робіт - [1] і [2].
- Відновіть та виведіть на передній план 1-й сеанс
vi
, ввівши:
fg %1
-
Знову призупиніть перший сеанс
vi
за допомогою Ctrl+Z. -
Відновіть та виведіть на передній план 2-й сеанс
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>
Замініть
!!! question "Питання"
Поясніть різницю між `pgrep` і `pidof` для пошуку ідентифікатора процесу запущеної команди.
Завдання 8¶
Вивчення файлової системи /sys¶
Щоб дослідити файлову систему /sys¶
- Виведіть вміст каталогу /sys. Впишіть:
ls /sys
!!! question "Питання"
Яка інформація зберігається в каталозі /sys?
- Перейдіть до певного запису /sys, наприклад, інформації про ЦП.
cd /sys/devices/system/cpu
- Виведіть список вмісту поточного каталогу, щоб переглянути інформацію, пов’язану з ЦП.
ls
!!! question "Питання"
Яка інформація про ЦП доступна у файловій системі /sys?
!!! question "Питання"
Поясніть призначення файлової системи /sys в Linux і її роль в управлінні обладнанням і конфігурацією системи.
Завдання 9¶
Знищення процесів за назвою за допомогою pkill
¶
Щоб завершити процеси за назвою за допомогою pkill
¶
- Ідентифікуйте процеси з конкретною назвою, наприклад "firefox".
pkill firefox
!!! question "Питання"
Чи всі процеси з назвою "firefox" були припинені?
- Перевірте стан процесів, які ви зупинили за допомогою
ps
.
ps aux | grep firefox
!!! question "Питання"
Чи залишилися процеси з назвою "firefox"?
Використовуйте pkill
, щоб примусово припинити всі процеси з певним іменем.
pkill -9 firefox
Переконайтеся, що всі процеси з назвою «firefox» завершено.
!!! question "Питання"
Яка різниця між використанням `kill` і `pkill` для завершення процесів за назвою?
Вправа 10¶
Ця вправа охоплює використання потужної команди exec
.
Керування процесом за допомогою exec
¶
Щоб замінити поточну оболонку іншою командою за допомогою exec
¶
- Розпочніть новий сеанс оболонки. Впишіть:
bash
- Виконайте команду, яка не завершується в новій оболонці, наприклад простий цикл while.
while true; do echo "Running..."; done
- У поточній оболонці замініть запущену команду на іншу за допомогою
exec
.
exec echo "This replaces the previous command."
Зауважте, що попередня команда завершується, та виконується нова команда.
- Переконайтеся, що стара команда більше не виконується за допомогою
ps
.
ps aux | grep "while true"
!!! question "Питання"
Попередня команда все ще виконується?
!!! question "Питання"
Поясніть, як команда `exec` може замінити поточний процес оболонки на іншу команду.
Вправа 11¶
Керування процесом за допомогою killall
¶
Як і kill
, killall
є командою для завершення процесів за назвою. Можна спостерігати певну подібність між використанням killall
, kill
і pkill
у завершенні процесу.
Щоб завершити процеси за назвою за допомогою killall
¶
- Ідентифікуйте процеси за допомогою конкретної назви, наприклад «chrome».
killall chrome
!!! question "Питання"
Чи всі процеси з назвою "chrome" були припинені?
- Перевірте стан процесів, які ви зупинили за допомогою
ps
.
ps aux | grep chrome
!!! question "Питання"
Чи залишилися процеси з назвою "chrome"?
- Використовуйте
killall
, щоб примусово припинити всі процеси з певною назвою.
killall -9 chrome
Переконайтеся, що всі процеси з іменем "chrome" завершено.
!!! question "Питання"
Чим `killall` відрізняється від `pkill` і `kill` при завершенні процесів за назвою?
Вправа 12¶
Керування cgroups
¶
Для керування процесами за допомогою cgroups
¶
- Перелічіть існуючі
cgroups
у вашій системі.
cat /proc/cgroups
!!! question "Питання"
Які контролери `cgroup` доступні у вашій системі?
- Створіть нову cgroup за допомогою контролера ЦП. Назвіть її «mygroup».
sudo mkdir -p /sys/fs/cgroup/cpu/mygroup
- Перемістіть певний процес (наприклад, запущену команду сну) до «mygroup»
cgroup
.
echo <PID> | sudo tee /sys/fs/cgroup/cpu/mygroup/cgroup.procs
Замініть
- Перевірте, чи процес перенесено до "mygroup"
cgroup
.
cat /sys/fs/cgroup/cpu/mygroup/cgroup.procs
!!! question "Питання"
Чи вказаний процес у "mygroup" cgroup?
!!! question "Питання"
Поясніть концепцію «cgroups» у Linux і те, як вони можуть керувати та контролювати розподіл ресурсів для процесів.
Вправа 13¶
Керування процесами за допомогою renice
¶
Щоб налаштувати пріоритет запущеного процесу за допомогою renice
¶
- Визначте запущений процес із певним PID та пріоритетом за допомогою
ps
.
ps -p <PID> -o ni
!!! question "Питання"
Який поточний пріоритет (значення nice) процесу?
- Використовуйте команду
renice
, щоб змінити пріоритет запущеного процесу (значення nice).
renice <PRIORITY> -p <PID>
Замініть
- Переконайтеся, що пріоритет процесу було змінено за допомогою
ps
.
ps -p <PID> -o ni
!!! question "Питання"
Зараз пріоритет інший?
- Поекспериментуйте зі зміною пріоритету на вищі та нижчі значення та спостерігайте за впливом на використання ресурсів процесу.
!!! question "Питання"
Що відбувається зі споживанням ресурсів процесом із різними значеннями nice?
!!! question "Питання"
Поясніть, як команда renice використовується для налаштування пріоритету запущених процесів і її вплив на використання ресурсів процесу.
Author: Wale Soyinka
Contributors: Steven Spencer, Ganna Zhyrnova