В этом упражнении вы будете использовать команду top для динамического просмотра запущенных процессов и управления ими.
Результаты
Вы сможете управлять процессами в режиме реального времени.
Войдите на workstation как пользователь student с паролем student.
workstation
student
На workstation выполните команду lab processes-monitor start. Эта команда запускает подготовительный сценарий, который проверяет доступность хоста servera в сети.
servera
[student@workstation ~]$ lab processes-monitor start
[student@workstation ~]$
lab processes-monitor start
На workstation откройте рядом два окна терминала. Здесь эти терминалы называются левым и правым. На каждом терминале с помощью команды ssh войдите на хост servera как пользователь student.
[student@workstation ~]$ ssh student@servera ...output omitted... [student@servera ~]$
ssh student@servera
[student@servera ~]$
В командной оболочке левого терминала создайте новый каталог с именем /home/student/bin. В новом каталоге создайте сценарий оболочки с именем monitor, который создает искусственную нагрузку на процессор. Убедитесь, что сценарий является исполняемым.
/home/student/bin
monitor
С помощью команды mkdir создайте новый каталог с именем /home/student/bin.
[student@servera ~]$ mkdir /home/student/bin
mkdir /home/student/bin
Создайте в каталоге /home/student/bin сценарий с именем monitor и следующим содержимым:
#!/bin/bash while true; do var=1 while [[ var -lt 60000 ]]; do var=$(($var+1)) done sleep 1 done
Сценарий monitor работает до тех пор, пока не будет завершен. Он создает искусственную нагрузку на процессор, выполняя шестьдесят тысяч задач сложения. Затем он ничего не делает в течение одной секунды, сбрасывает переменную и повторяется.
Используйте команду chmod, чтобы сделать файл monitor исполняемым.
[student@servera ~]$ chmod a+x /home/student/bin/monitor
chmod a+x /home/student/bin/monitor
В командной оболочке правого терминала запустите утилиту top. Измените размер окна, сделав его как можно больше по высоте.
[student@servera ~]$ top top - 12:13:03 up 11 days, 58 min, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 1829.4 total, 1377.3 free, 193.9 used, 258.2 buff/cache MiB Swap: 1024.0 total, 1024.0 free, 0.0 used. 1476.1 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5861 root 20 0 0 0 0 I 0.3 0.0 0:00.71 kworker/1:3-events 6068 student 20 0 273564 4300 3688 R 0.3 0.2 0:00.01 top 1 root 20 0 178680 13424 8924 S 0.0 0.7 0:04.03 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp ...output omitted...
top
В командной оболочке левого терминала выполните команду lscpu, чтобы определить количество логических процессоров на этой виртуальной машине.
[student@servera ~]$ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 ...output omitted...
lscpu
CPU(s): 2
В командной оболочке левого терминала запустите один экземпляр программы monitor. Используйте амперсанд (&), чтобы запустить процесс в фоновом режиме.
[student@servera ~]$ monitor & [1] 6071
monitor &
В командной оболочке правого терминала просмотрите вывод команды top. Используйте отдельные клавиши l, t и m для переключения строк заголовка для нагрузки, потоков и памяти. Убедитесь, что отображаются все заголовки.
Обратите внимание на идентификатор процесса (PID) для monitor. Посмотрите процентную долю использования ЦП процессом. Она должна быть в пределах 15–25 %.
[student@servera ~]$ top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 071 student 20 0 222448 2964 2716 S 18.7 0.2 0:27.35 monitor ...output omitted...
Просмотрите средние нагрузки. Средняя нагрузка за одну минуту в настоящее время меньше 1. На полученное значение может влиять конкуренция за ресурсы со стороны другой виртуальной машины или виртуального хоста.
top - 12:23:45 up 11 days, 1:09, 3 users, load average: 0.21, 0.14, 0.05
В командной оболочке левого терминала запустите второй экземпляр monitor. Используйте амперсанд (&), чтобы запустить процесс в фоновом режиме.
[student@servera ~]$ monitor & [2] 6498
В командной оболочке правого терминала обратите внимание на идентификатор (PID) второго процесса monitor. Посмотрите процентную долю использования ЦП процессом. Она также должна быть в пределах 15–25 %.
[student@servera ~]$ top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6071 student 20 0 222448 2964 2716 S 19.0 0.2 1:36.53 monitor 6498 student 20 0 222448 2996 2748 R 15.7 0.2 0:16.34 monitor ...output omitted...
Снова проверьте среднюю нагрузку за минуту. Она все еще меньше 1. Обязательно подождите как минимум минуту, чтобы расчеты обновились с учетом новой рабочей нагрузки.
top - 12:27:39 up 11 days, 1:13, 3 users, load average: 0.36, 0.25, 0.11
В командной оболочке левого терминала запустите третий экземпляр monitor. Используйте амперсанд (&), чтобы запустить процесс в фоновом режиме.
[student@servera ~]$ monitor & [3] 6881
В командной оболочке правого терминала обратите внимание на идентификатор (PID) третьего процесса monitor. Посмотрите процентную долю использования ЦП процессом. Она снова должна быть в пределах 15–25 %.
[student@servera ~]$ top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6881 student 20 0 222448 3032 2784 S 18.6 0.2 0:11.48 monitor 6498 student 20 0 222448 2996 2748 S 15.6 0.2 0:47.86 monitor 6071 student 20 0 222448 2964 2716 S 18.1 0.2 2:07.86 monitor
Чтобы значение средней нагрузки оказалось больше 1, необходимо запустить больше процессов monitor. В учебной среде 2 процессора, поэтому трех процессов недостаточно. Запустите еще три процесса monitor. Снова проверьте среднюю нагрузку за минуту. Теперь она должна превышать 1. Обязательно подождите как минимум минуту, чтобы расчеты обновились с учетом новой рабочей нагрузки.
[student@servera ~]$ monitor & [4] 10708 [student@servera ~]$ monitor & [5] 11122 [student@servera ~]$ monitor & [6] 11338
top - 12:42:32 up 11 days, 1:28, 3 users, load average: 1.23, 2.50, 1.54
Закончив наблюдение за значениями средней нагрузки, завершите каждый процесс monitor из top.
В командной оболочке правого терминала нажмите k. Появится приглашение под заголовками и над столбцами.
...output omitted... PID to signal/kill [default pid = 11338]
В приглашении выбраны процессы monitor в верхней части списка. Нажмите Enter, чтобы завершить процесс.
...output omitted... Send pid 11338 signal [15/sigterm]
Снова нажмите Enter, чтобы подтвердить сигнал SIGTERM 15.
Убедитесь, что выбранный процесс больше не отображается в top. Если этот PID не исчез, повторите шаги завершения, заменив, когда будет предложено, сигнал SIGKILL 9.
6498 student 20 0 222448 2996 2748 R 22.9 0.2 5:31.47 monitor 6881 student 20 0 222448 3032 2784 R 21.3 0.2 4:54.47 monitor 11122 student 20 0 222448 2984 2736 R 15.3 0.2 2:32.48 monitor 6071 student 20 0 222448 2964 2716 S 15.0 0.2 6:50.90 monitor 10708 student 20 0 222448 3032 2784 S 14.6 0.2 2:53.46 monitor
Повторите предыдущий шаг для каждого из оставшихся экземпляров monitor. Убедитесь, что в top не осталось ни одного процесса monitor.
В командной оболочке правого терминала нажмите q, чтобы выйти из top. Выйдите с servera на обоих терминалах.
[student@servera ~]$ exit logout Connection to servera closed. [student@workstation ~]$
exit
Конец
На workstation запустите сценарий lab processes-monitor finish, чтобы закончить упражнение.
[student@workstation ~]$ lab processes-monitor finish
lab processes-monitor finish
Упражнение завершено.