Ввести команду top и разобрать содержимое экрана.
top
Оставьте окно с top в открытом состоянии, а для дальнейшей работы созайте новую сессию с терминалом и расположите окна таким образом, чтобы вы всегда видели окно top .
Я думаю вы уже заметили, что каждая утилита, собирает информацию с файлов(ибо всё есть файл) и выводит её в отформатированном виде в консоль.
При старте системы инициализируется куча процессов, которые запускаются для корректной работы системы. Мы можем запускать свои программы, которые так же будут порождать дерево процессов. Информацию о текущих задачах ядро должно где-то хранить и в линуксе это реализовано путём создания виртуальной файловой системы, которая монтируется в корень под именем /proc. Почему виртуальной? Потому-что она существует только в виртуальной среде, хранится в оперативной памяти и динамически изменяется в зависимости от текщих выполняемых задач.
Перейдите в каталог /proc и выведите весь список файлов.
cd /proc; ls -la
Вы увидите множество директорий название которых состоит из чисел. Это PID запущенных процессов.
Находясь в директории /proc наберите следующие команды.
cat uptime # солько время запущена система в секундах /
cat version
Давайте найдём PID процесса top и перейдём в эту директорию.
cd pid
Выведите список файлов. Напрямую с ними вам работать вряд ли придётся, для этого существуют различные утилиты, которые при необходимости обращаются к информации хранящейся в данной файловой структуре. Но мы можем ознакомиться с содержимым некоторых из них.
cat cmdline # команда которая запустила этот процесс
cat ./environ # Переменные среды, которым обладает процесс. Попробуйте определить как отделяется одно значение от другого
cat status
Можно поставить ограничение на максимальное количество процессов запускаемых пользователем. Для этого редактируется файл ~/.bash_profile. Прописав в нём строку
ulimit -u 1024
Вы ограничите максимальное количество запущенных процессов. Но этот файл легко может отредактировать пользователь, поэтому лучше создать файл с расширением .conf в /etc/security/limits.d и заполнить его согласно шаблону /etc/security/limits.conf. В нашем случае файл должен содержать строку
nproc - 1024
Мониторинг
Выполните несколько комманд
ping sigma-it.ru
В окно терминала начнёт выводится пинги сайта. Отправьте задачу в фон клавишами Ctrl+z.
Ввести.
gedit
Откроется текстовый редактор. Обратите внимание, что консоль сейчас не реагирует на вводы команд. Нажмите Ctrl+z и отправьте процесс в фон.
Узнайте id каждой из задач командой ps
В окне с командой top нажмите f, выберите поле PID и нажмите s, теперь выводимые результаты будут отсортированы по идентификатору процесса, нажмите q для выхода. Найдите процессы в списке задач. Поскольку после отправки процессов в фон, вы не предпринимали никаких действий, у процессов должно быть состояние T.
Используйте команду
ps -fax
Чтобы увидеть все запущенные процессы с соответвующими родительскими связями.
Попробуйте использовать флаги -e (выводит процессы всех пользователей), -f (выводит чуть больше информации о процессе).
Введите команду jobs, чтобы увидеть все текущие запущенные команды в фоновом режиме. Для того чтобы заставить их работать введите
bg номер_задачи
Когда из фона выйдет процесс ping он продолжит выводить информацию в консоль. Чтобы подобного не происходило, перед запуском можно перенаправить вывод пинга в файл.
ping sigma-it.ru > /dev/null
В линуксе есть несколько интересных файлов.
- /dev/null — «чёрная дыра». Удобно использовать, когда необходимо проверить скорость записи системы. Ничего сохранено при этом не будет.
- /dev/zero — источник нулей
- /dev/random — источник случайных данных
Добавим нагрузки
Используя источник нулей мы будем заполнять нулями сформированный файл и записывать его на наш диск. Программа dd(data definition) копирует информацию со стандартного входа на стандартный выход.
dd if=/dev/zero of=./testfile1 bs=2K &
if — указываем откуда будем брать информацию of — указывduаем куда будут записаны входящие данные & — Сразу отправляет задачу в фон и выполняет её там
Запустите несколько параллельных процессов dd и проследите динамику изменения статистики.
найти процессы используя команду ps
ps
вывести размер файлов, которые мы только что создали
du -shc testfile*
Теперь удалим только что созданные файлы. Для начала найдём эти файлы.
find ./ -name "testfile*"
Теперь допишем нашу команду
find ./ -name "testfile*" -exec rm '{}' \;
параметр -exec позволяет выполнить любую команду, которая будет применена к каждому результату поиска. В {} будут храниться результаты поиска.
Пока процесс запущен, он может находиться в одном из состояний
- R:Ready
- D:Delay
- S:Stoped
- T:Terminated
- Z:Zombie
- N:Niceness
- <:not Niceness
Процессу можно отправлять специальные системные сообщения kill -9 pid, весь список которых вы можете посмотреть по команде kill -l.
отправка сообщения -9 крайне не рекомендуется и является экстренным методом завершения процесса.
Так же у каждого процесса можно менять уступчивость, которая влияет на приоритет этого процесса.
renice -n -19 pid
Уступчивость варьируется в диапазоне от -20 до 19, где 19 — самый уступчивый процесс и будет обладать наименьшим приоритетом.
Запустить процесс с установленным параметром уступчивости можно…
nice -n 5 ping google.com
Используя утилиты iostat и mpstat можно делать мгновенные снимки некоторых параметров системы и вести лог. Введите команду iostat 1, если пакет не установлен, вам предложат произвести установку.
Check point
- подключите съёмный носитель и начните операцию записи используя dd.
- запустите программу iostat с интервалом в 5 секунд, так чтобы она выводила информацию на экран и производила запись в файл /var/log/io_usb_1.txt. Произведите замер скорости записи на съёмный носитель.
- удалите файл с флешки и запустите тест заново, увеличив размер записываемого блока до 5K. Лог записывайте в файл /var/log/io_usb_2.txt.
- сравните размеры каждого лога
Задачи
- Запустите команду dd if=/dev/zero of=/dev/null &
- Продублируйте команду несколько раз
- Найдите запущенные процессы dd в списке процессов top
- завершите один из них нажав кнопку k
- выведите дерево процессов командой ps fax
- Завершите родителя запустившего процессы dd
- отправьте сообщение SIGSTOP одному из процессов dd
- завершите все процессы dd командой killall
- найдите остановленный процесс, запустите его и убейте.