Unix / Linux - Системная производительность

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

Unix / Linux - System Performance

Компоненты производительности

Прежде чем начинать играть с нашими системами, важно понять, из чего состоит производительность системы. Представьте себе ваш компьютер как 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