Unix / Linux - Системная производительность
Здравствуйте,野心勃勃的技术爱好者们!作为你们友善的邻里计算机科学老师,我很高兴引导你们进入Unix/Linux系统性能的迷人世界。如果你是编程新手,不用担心——我们将从基础开始,逐步学习。所以,拿起一杯咖啡(或者茶,如果你喜欢的话),让我们开始吧!

Компоненты производительности
Прежде чем начинать играть с нашими системами, важно понять, из чего состоит производительность системы. Представьте себе ваш компьютер как finely tuned оркестр – каждый компонент играет важную роль в создании гармоничного исполнения.
1. Использование ЦП
Центральный процессор (ЦП) похож на дирижера нашего оркестра. Он отвечает за выполнение команд и координацию всех других компонентов. Когда мы говорим о использовании ЦП, мы имеем в виду, как занят этот дирижер.
2. Использование памяти
Память, или ОЗУ, похожа на партитуру для нашего оркестра. Она хранит данные, к которым ЦП должен получить быстрый доступ. Если мы исчерпаем память, наша производительность может значительно замедлиться.
3. Ввод/вывод диска
Ввод/вывод диска (I/O) похож на процесс, когда музыканты берут новые инструменты или партитуры. Он включает чтение или запись на жесткий диск, что может быть медленнее по сравнению с доступом к ОЗУ.
4. Производительность сети
Производительность сети похожа на то, как хорошо слышат друг друга музыканты оркестра и могут синхронизироваться. Она включает скорость и эффективность передачи данных по сети.
Инструменты производительности
Теперь, когда мы понимаем компоненты, давайте посмотрим на некоторые инструменты, которые мы можем использовать для измерения и улучшения производительности нашей системы. Я люблю думать о них как о инструментах настройки нашего оркестра.
1. Команда top
Команда top похожа на панель управления вашей системой. Она предоставляет реальное время выполнения процессов и системных ресурсов.
$ top
Эта команда будет отображать постоянно обновляемый список процессов, отсортированный по использованию ЦП по умолчанию. Давайте разберем, что вы увидите:
- PID: Идентификатор процесса
 - USER: Пользователь, владеющий процессом
 - PR: Приоритет
 - NI: Значение nice (влияет на приоритет)
 - VIRT: Использованная виртуальная память
 - RES: Использованная физическая память
 - SHR: Shared memory
 - S: Статус процесса
 - %CPU: Использование ЦП
 - %MEM: Использование памяти
 - TIME+: Общее время ЦП
 - COMMAND: Имя команды
 
2. Команда vmstat
Команда vmstat похожа на стетоскоп для сердца вашей системы – она предоставляет информацию о процессах, памяти,swap, блок I/O, перехватах и активности ЦП.
$ vmstat 2 5
Эта команда будет отображать системные统计数据 каждые 2 секунды, для 5 итераций. Вывод включает:
- r: Количество процессов, ожидающих времени выполнения
 - b: Количество процессов в непрерывном сне
 - swpd: Количество используемой виртуальной памяти
 - free: Количество свободной памяти
 - buff: Количество памяти, используемой в буферах
 - cache: Количество памяти, используемой в кэше
 - si: Количество памяти,swap из диска
 - so: Количество памяти,swap на диск
 - bi: Блоки, полученные от блочного устройства
 - bo: Блоки, отправленные на блочное устройство
 - in: Количество прерываний в секунду
 - cs: Количество переключений контекста в секунду
 - us: Время, затраченное на выполнение nonsystem кода
 - sy: Время, затраченное на выполнение системного кода
 - id: Время, проведенное в простое
 - wa: Время, проведенное в ожидании I/O
 
3. Команда iostat
Команда iostat похожа на спидометр для ваших дисковых накопителей. Она предоставляет статистику ЦП и ввода/вывода для устройств и разделов.
$ iostat -x 2 5
Эта команда будет отображать расширенную статистику каждые 2 секунды, для 5 итераций. Вывод включает:
- Device: Имя устройства
 - rrqm/s: Число объединенных запросов на чтение в секунду
 - wrqm/s: Число объединенных запросов на запись в секунду
 - r/s: Чтения в секунду
 - w/s: Записи в секунду
 - rkB/s: Килобайты, считанные в секунду
 - wkB/s: Килобайты, записанные в секунду
 - avgrq-sz: Средний размер запроса в секторах
 - avgqu-sz: Средняя длина очереди
 - await: Среднее время выполнения запросов I/O
 - svctm: Среднее время обслуживания
 - %util: Процент времени ЦП, в течение которого issuing I/O запросы
 
4. Команда netstat
Команда netstat похожа на диспетчера движения для вашей сети. Она отображает сетевые подключения, таблицы маршрутизации, статистику интерфейсов, masquerade подключения и multicast членства.
$ netstat -tuln
Эта команда будет отображать:
- Активные интернет-соединения (TCP и UDP)
 - Слушающиеся сокеты
 - Числовые адреса и номера портов
 
Вывод включает:
- Proto: Протокол (TCP или UDP)
 - Recv-Q: Данные, ожидающие приема
 - Send-Q: Данные, ожидающие отправки
 - Local Address: Локальный конец сокета
 - Foreign Address: Удаленный конец сокета
 - State: Состояние сокета
 
5. Команда sar
Команда sar (System Activity Reporter) похожа на черный ящик для вашей системы. Она собирает, отчеты и сохраняет информацию о системной активности.
$ sar -u 2 5
Эта команда будет отображать статистику использования ЦП каждые 2 секунды, для 5 итераций. Вывод включает:
- %user: Процент использования ЦП на уровне пользователя
 - %nice: Процент использования ЦП на уровне пользователя с nice приоритетом
 - %system: Процент использования ЦП на системном уровне
 - %iowait: Процент времени, когда ЦП находился в простое, в то время как система имела outstanding запросы I/O
 - %steal: Процент времени, проведенного в involuntary ожидании виртуального ЦП, в то время как гипервайзер обслуживал другой виртуальный процессор
 - %idle: Процент времени, когда ЦП находился в простое и система не имела outstanding запросы I/O
 
Вот таблица, резюмирующая эти инструменты производительности:
| Команда | Цель | Основная информация | 
|---|---|---|
| top | Реальный монитор системы | Список процессов, использование ЦП, использование памяти | 
| vmstat | Статистика виртуальной памяти | Процессы, память, swap, I/O, активность ЦП | 
| iostat | Статистика I/O | Статистика ЦП, статистика I/O устройства | 
| netstat | Статистика сети | Сетевые подключения, таблицы маршрутизации, статистика интерфейсов | 
| sar | Отчет о системной активности | Использование ЦП, использование памяти, I/O активность, сетевая активность | 
Помните, что овладение этими инструментами похоже на обучение игре на инструменте – это требует практики! Не отчаивайтесь, если это сначала кажется подавляющим. Начните с одного инструмента,彻底 understand его вывод, и затем переходите к следующему.
За годы преподавания я обнаружил, что студенты, которые regularly экспериментируют с этими инструментами на своих системах, развивают гораздо более глубокое понимание производительности системы. Это как научиться слышать отдельные инструменты в оркестре – внезапно вы можете точно определить, где можно сделать улучшения.
Так что, дорогие студенты, я призываю вас запустить терминал и начать исследовать. Кто знает? Вы можете стать следующим великим дирижером производительности системы!
Credits: Image by storyset
