tag: #N/S/Medium #N/T/Conspect #N/T/Article #N/T/Public
2024-03-20 23:39, [Linux Performance Analysis in 60000 milliseconds](https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55),
Authors: [[]]
Related: [[]]
https://www.brendangregg.com/linuxperf.html #T/T/To/Do/Note/Refactor
https://youtu.be/9A3QtGMuqvw #T/T/To/Do/Note/Refactor добавить ссылки на команды.
Есть большое количество различных специализированных и корпоративных систем сбора статистики, проверок производительности и уведомления о проблемах, вроде [[% zabbix]], [[% grafana]], [[% prometheus]] и многих других, которые при правильной настройке сами могут указать на место проблемы. но иногда даже в крупных корпоративных срдах, не говоря уж про маленькие частные решения, нам нужно войти на сервер и вручную запустить некоторые стандартные инструменты измерения производительности Linux.
==Итак: Возникает серьезная проблема с производительностью, и вы подозреваете, что она вызвана сервером, вы на него заходите: что вы проверяете в первую минуту?==
Ниже приведены первые 60 секунд оптимизированного исследования производительности [[& LINUX|линукс сервера]] в командной строке с использованием стандартных инструментов Linux,
за это время вы можете получить общее представление об использовании системных ресурсов и запущенных процессах, выполнив следующие десять команд.
```bash
uptime
dmesg | tail
vmstat 1
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
```
> [!info]
> Некоторые из этих команд требуют установки пакета sysstat
[[Метрики]] предоставляемые этими командами, помогут произвести [[Метод USE|USE анализ]]: в первую очередь ищите [[Метрики ошибок]] и [[Метрики насыщенности]], поскольку их легко интерпретировать, а затем - [[Метрики использования]] ресурсов (ЦП, памяти, дисков и т. д.).
Когда вы базово проверили и "оправдали" ресурс, это сужает дальнейшие потенциальные дальнейшие цели для изучения.
```bash
# Создание папки с уникальным временным штампом
REPORT_DIR="отчет_$(date '+%Y-%m-%d_%H-%M-%S')"
mkdir "$REPORT_DIR"
# Выполнение команд и запись вывода в файлы внутри созданной папки
uptime | tee "$REPORT_DIR/uptime_report.txt"
dmesg | tail | tee "$REPORT_DIR/dmesg_report.txt"
vmstat 1 | tee "$REPORT_DIR/vmstat_report.txt"
mpstat -P ALL 1 | tee "$REPORT_DIR/mpstat_report.txt"
pidstat 1 | tee "$REPORT_DIR/pidstat_report.txt"
iostat -xz 1 | tee "$REPORT_DIR/iostat_report.txt"
free -m | tee "$REPORT_DIR/free_report.txt"
sar -n DEV 1 | tee "$REPORT_DIR/sar_dev_report.txt"
sar -n TCP,ETCP 1 | tee "$REPORT_DIR/sar_tcp_report.txt"
```
![[% tmux#Паралельный запуск команд для Fast Linux Performance Analysis]]
```bash
REPORT_DIR="/tmp/report_$(date '+%Y-%m-%d_%H-%M-%S')" && mkdir "$REPORT_DIR" && tmux new-session -d -s my_session && tmux split-window -h && tmux select-pane -t 0 && tmux send-keys "timeout 60 uptime | tee $REPORT_DIR/uptime_report.txt" Enter && tmux split-window -v && tmux send-keys "timeout 60 vmstat 1 | tee $REPORT_DIR/vmstat_report.txt" Enter && tmux split-window -v && tmux send-keys "timeout 60 free -m | tee $REPORT_DIR/free_report.txt" Enter && tmux select-pane -t 1 && tmux send-keys "timeout 60 dmesg | tail | tee $REPORT_DIR/dmesg_report.txt" Enter && tmux split-window -v && tmux send-keys "timeout 60 mpstat -P ALL 1 | tee $REPORT_DIR/mpstat_report.txt" Enter && tmux split-window -v && tmux send-keys "timeout 60 sar -n DEV 1 | tee $REPORT_DIR/sar_dev_report.txt" Enter && tmux attach-session -t my_session
```
[[Сбор базовых данных о линукс хосте]]
[[File-based storage#Смотрим нагрузку на диски]]
[[% last]] #T/T/To/Do/Note/Refactor
https://netflixtechblog.com/netflix-at-velocity-2015-linux-performance-tools-51964ddb81cf #T/T/To/Do/Note
##### Пример быстро смотреть нагрузки от [[@Руслан Точилин|@Ruslan Tochilin]]
```bash
echo "LA: $(uptime | awk '{print $10,$11,$12}') | CPU: $(cat /proc/cpuinfo | grep "model name" | wc -l) | LOAD: $(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}') | MEM: $(free -m | awk 'NR==2{printf "%.2fGB/%.2fGB", $3/1024, $2/1024}') | $(iostat -x -d 1 1 | awk '$1 ~ /^(nvme|sd)/ {disks[$1]=$NF} END {for (disk in disks) printf "%s: %.2f%% ", disk, disks[disk]; print ""}')"
```
Пример вывода
```bash
LA: 4.80, 4.34, 4.36 | CPU: 8 | LOAD: 48.4% | MEM: 36.09GB/62.64GB | nvme0n1: 7.76% nvme1n1: 11.54%
```
## Подробный разбор команд
### [[% uptime]]
![[% uptime#Описание]]
_________________
Три числа дают нам некоторое представление о том, как нагрузка меняется с течением времени. Например, если вас попросили проверить проблемный сервер, а значение 1 минуты намного ниже значения 15 минут, возможно, вы вошли в систему слишком поздно и пропустили проблему.
### [[% dmesg]]
![[% dmesg#dmesg tail]]
### [[% vmstat]]
![[% vmstat#vmstat 1]]
[[% mpstat]]
![[% mpstat#Вывести разбивку времени процессора с разбивкой по ядрам]]
[[% pidstat]]
![[% pidstat#Выводить список процессов занимающих процессор раз в секунду]]
### [[% iostat]]
![[% iostat#Вывод расширенной статистик нагрузки на диски с обновлением раз в секунду, и скрыть устройства для которых небыло активности.]]
### [[% free]]
![[% free#Вывести раскладку использования памяти в MiB (мебибайтах)]]
### [[% sar]]
![[% sar#Вывести статистику пропускной способности интерфейсов раз в секунду]]
![[% sar#Вывести обобщенную информация о некоторых ключевых показателях TCP]]
## Последующий анализ
Есть еще много команд и методологий, которые вы можете применить для более глубокого изучения. См. учебник Брендана [по инструментам производительности Linux](https://medium.com/@Netflix_Techblog/netflix-at-velocity-2015-linux-performance-tools-51964ddb81cf) #T/T/To/Do/Note от Velocity 2015, в котором задействовано более 40 команд, охватывающих наблюдаемость, тестирование производительности, настройку, статическую настройку производительности, профилирование и трассировку.
________