Linux

5 — df iostat

Опубликовано

Ввести команду 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
  • найдите остановленный процесс, запустите его и убейте.

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

Ваш адрес email не будет опубликован.