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