├── README.md ├── docx └── 200_1_consp.docx └── 200_1_consp.md /README.md: -------------------------------------------------------------------------------- 1 | # lpic_2-201 2 | Изучение линукс по программе LPI-2 exam 201 3 | -------------------------------------------------------------------------------- /docx/200_1_consp.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ksemaev/lpic_2-201/HEAD/docx/200_1_consp.docx -------------------------------------------------------------------------------- /200_1_consp.md: -------------------------------------------------------------------------------- 1 | ## 200.1 Измерение производительности и решение проблем связанных с ней 2 | 3 | Студент должен уметь измерять производительность железа, пропускную способность сети, определять и исправлять возникающие проблемы. 4 | 5 | **Изучаем** : 6 | 7 | - метрики ЦПУ; 8 | - метрики ОЗУ; 9 | - метрики HDD; 10 | 11 | Вне зависимости от используемых инструментов снятия метрик, для определения производительности CPU используются следующие характеристики: 12 | 13 | - **user** : время, затраченное на исполнения кода на уровне пользователя (чаще всего код софта, не использующий железо); 14 | - **system** : время, затраченное на исполнение кода на уровне ядра (чаще всего это ОС – операции ввода вывода, управление процессами и тд); 15 | - **nice** : время, затраченное на выполнение операций с измененным приоритетом; 16 | - **idle** : время простаивания CPU; 17 | - **wait** : время ожидания ввода-вывода (чаще всего ожидание ответа от дисковой подсистемы); 18 | - **hardware_interrupts** : время затраченное на обработку аппаратных прерываний (события от железа); 19 | - **software_interrupts** : время затраченное на обработку программных прерываний (события от программного кода); 20 | - **stolen** : время ожидания ответа от гипервизора (в случае виртуальной машины). 21 | - **load average** : показывает 'занятость' процессора за последние 1, 5 и 15 минут и позволяет определить вектор нагрузки - увеличивается/уменьшается 22 | 23 | Для определения базовых параметров производительности можно использовать утилиты **vmstat** , **top** и модный **htop**. Для тестовой загрузки процессора мы использовали пакет **stress**. 24 | 25 | #### Примеры 26 | Команда | Описание 27 | --- | --- 28 | **sar** *1* | Загрузка процессора 29 | **iostat** *-c 1*| Загрузка процессора 30 | **sar** *-P ALL* | Загрузка процессора по ядрам 31 | **sar** *-q 1* | Load Average 32 | **w, uptime, tload** | Load Average 33 | **ps** *-eo pid,%cpu,cputime,%mem,rss,vsz,comm --sort -%cpu \| head -5 \| column -t* | Топ-5 процессов по загрузке CPU 34 | 35 | ------------------------------ 36 | 37 | Вне зависимости от используемых инструментов снятия метрик, для определения производительности оперативной памяти используются следующие характеристики: 38 | 39 | - **total** : всего ОЗУ; 40 | - **free** : реально свободно ОЗУ (т.е. количество никак не задействованной памяти, Linux стремится уменьшить ее до минимума); 41 | - **used** : используется ОЗУ; 42 | - **shared** : память разделяемая процессами (чаще всего используется для взаимодействия между процессами во избежание использования системных вызовов ядра); 43 | - **cached** : кэшированная ОЗУ (например, набор данных, к которым часто обращается программа, может быть помещен в кэш ОЗУ с жесткого диска, для более быстрого доступа к ним); 44 | - **buffered** : буферизированная ОЗУ (например, промежуточное хранилище данных перед обработкой, или перемещением их на диск). Часто можно увидеть buffered/cached как единое целое, логически показывающее ту область памяти, которую можно освободить при необходимости. 45 | - **available** : количество памяти которую можно использовать без необходимости обращаться к swap (т.е. память, которая будет свободна если выкинуть все из кэшей и т.д.); 46 | - **active** : память, активно используемая процессом; 47 | - **inactive** : память, которая была выделена под процесс, но в данный момент им больше не используется; 48 | - **swapped** : в свопе (на жестком диске – в разделе или в файле); 49 | 50 | Для раздела (или файла) подкачки могут быть использованы метрики: 51 | 52 | - **swapped_in** : количество блоков, считанных за секунду с диска; 53 | - **swapped_out** : количество блоков, записанных за секунду на диск; 54 | 55 | Здесь и далее: размер блока указывается при форматировании файловой системы, чаще всего его размер равен 4Кб. 56 | 57 | \* _Мне кажется, что swapped_in/out всё-таки измеряется в **страницах** памяти, но размер страницы тоже равен 4Кб. Размер же блока(сектора) зависит от самого устройства хранения и может быть 512/4096 байт, и именно этот блок является единицей записи на диск. А если говорить о блоке файловой системы (кластере) то он вообще может принимать различные значения и может задаваться при форматировании, в зависимости от размера раздела и его назначения. //eugenenuke_ 58 | 59 | [https://ru.wikipedia.org/wiki/Сектор_диска](https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BA%D1%82%D0%BE%D1%80_%D0%B4%D0%B8%D1%81%D0%BA%D0%B0) 60 | 61 | [https://toster.ru/q/19776](https://toster.ru/q/19776) 62 | 63 | Удобным инструментом для мониторинга состояния ОЗУ является **free**. Например: 64 | 65 | _free -m_ 66 | 67 | #### Примеры 68 | Команда | Описание 69 | --- | --- 70 | free -m | Информация о доступной/занятой памяти 71 | vmstat 1 | Информация о доступной/занятой памяти 72 | vmstat -s | Статистика по памяти 73 | sar -r 1 | Информация по использованию памяти 74 | sar -S 1 | Информация по использованию swap 75 | swapon -s | Информация по использованию swap 76 | ps -eo pid,%cpu,cputime,%mem,rss,vsz,comm --sort -%mem \| head -5 \| column -t | Топ-5 процессов по использованию памяти 77 | 78 | ------------------------------ 79 | 80 | Вне зависимости от используемых инструментов снятия метрик, для определения производительности жестких дисков (если конкретно – блочных устройств) используются следующие характеристики: 81 | 82 | - **blocks_in** : количество считанных блоков в единицу времени; 83 | - **blocks_out** : количество записанных блоков в единицу времени; 84 | - **total_read/write** : скорость чтения/записи между процессами и подсистемой ввода/вывода; 85 | - **actual_read/write** : скорость чтения/записи между подсистемой ввода/вывода и самими дисками; 86 | - **tid** : **t**hread**i**d (идентификатор потока процесса ввода/вывода, аналогичный pid для вычислительных процессов); 87 | - **prio** : приоритет (аналогично nice для процессов). Бывает idle (минимальный), be/0-7 (**b**est**e**ffort, чем меньше число тем выше приоритет) и rt/0-7 (**r**eal**t**ime, максимальный, чем меньше число тем выше приоритет) 88 | - **swapin** : используемая часть swap; 89 | - **tps** : количество запросов к диску в секунду; 90 | - **rrqm/s** : количество запросов на чтение в секунду; 91 | - **wrqm/s** : количество запросов на запись в секунду; 92 | - **r/s** : количество операций чтения в секунду; 93 | - **w/s** : количество операций записи в секунду; 94 | - **rkB/s** : скорость чтения в килобайт/сек; 95 | - **wkB/s** : скорость записи в килобайт/сек; 96 | - **avgrq-sz** : средний размер запроса к диску в секторах; 97 | - **avgqu-sz** : средняя очередь запросов к диску в секторах; 98 | - **await** : среднее время обслуживания запроса (включая нахождение в очереди на обработку) в миллисекундах; 99 | - **r_await** : среднее время обслуживания запроса на чтение (включая нахождение в очереди на обработку) в миллисекундах; 100 | - **w_await** : среднее время обслуживания запроса на запись (включая нахождение в очереди на обработку) в миллисекундах; 101 | - **svctm** : среднее время обслуживания запроса в миллисекундах; 102 | - **util** : условно говоря – насколько был занят диск (по аналогии с утилизацией процессора); 103 | 104 | Удобным инструментом для мониторинга состояния жестких дисков является **iotop** (ставится отдельным пакетом), **iostat** и **sar** (входят в состав пакета **sysstat** ). Например: 105 | 106 | #### Примеры 107 | Команда | Описание 108 | --- | --- 109 | **iostat** *-x 1* | Расширенная статистика по вводу/выводу 110 | **sar** *-b 1* | Статистика по вводу/выводу блочных устройств (суммарно) 111 | **sar** *-dp 1* | Статистика по вводу/выводу блочных устройств (по устройству) 112 | **iostat** *-d 1* | Статистика по вводу/выводу блочных устройств (по устройству) 113 | **vmstat** *-d 1* | Статистика по вводу/выводу блочных устройств (по устройству) 114 | **iostat** *-dp 1* | Статистика по вводу/выводу блочных устройств (по разделам) 115 | **vmstat** *-D* | Суммарная статистика по вводу/выводу 116 | --------------------------------------------------------------------------------