TG Telegram Group & Channel
ServerAdmin.ru | United States America (US)
Create: Update:

​​Очередной пост на тему bash и работы в консоли. Думаю, это будет полезный для многих материал. Я собрал консольные утилиты и команды, которые использую для того, чтобы определить, кто и как нагружает CPU и Память в Linux. Традиционно напоминаю, что это не сборник лучших решений и инструментов. Это просто мой личный опыт. Не обязательно, что я всё делаю правильно и оптимально.

Сколько памяти занимает процесс. На примере mysqld.
ps -o vsz,rss,cmd --pid $(pgrep mysqld)

Список процессов с сортировкой по нагрузке на CPU.
ps aux --sort -pcpu

Этот список можно ограничить только десятью самыми прожорливыми процессами.
ps aux --sort=-pcpu,+pmem | head -n 11

Список процессов с сортировкой по занимаемой памяти.
ps aux --sort -rss
ps aux --sort -vsz

Наблюдаем через top за конкретным процессом.
top -c -p $(pgrep -d',' -f mysqld)

Информация о загрузке каждого ядра процессора. Утилита mpstat входит в состав пакета sysstat. Обычно в системных репах она есть.
mpstat -P ALL

Загрузка процессора в %. Этой простой метрики очень не хватает в Linux, особенно когда переходишь с Windows. Все колхозят на свой лад, чтобы получить эту метрику. Вот 2 варианта, которые есть у меня. При грубой прикидке, результат получается близкий к реальности.
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}'

awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' <(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)

Текстовый вывод нагрузки на процессор в консоль. Ингода бывает удобно выводить с каким-то интервалом информацию о нагрузке в консоль. Например, делать это в течении 60 секунд с интервалом в секунду можно с помощью sar, которая тоже есть в sysstat
sar 1 60

Определить, кто родитель процесса. Например, если указать pid worker процесса nginx, команда ниже покажет pid процесса master. В случае с nginx это не имеет большого смысла, но иногда нужно.
ps -o ppid= -p 5606

Посмотреть информацию о процессоре.
lscpu

В завершении скажу про полезную репу, которую я регулярно использую при анализе загрузки систем - https://github.com/brendangregg/perf-tools Там много полезных утилит. В контексте данной заметки для анализа процессов я использовал утилиту execsnoop.

Следующая подборка будет на тему анализа нагрузки на дисковую подсистему. Думаю, это будет поинтереснее. Изначально хотел всё в одной сделать, но потом понял, что лучше разделить, чтобы в избранное можно было по тематике разнести.

#bash

​​Очередной пост на тему bash и работы в консоли. Думаю, это будет полезный для многих материал. Я собрал консольные утилиты и команды, которые использую для того, чтобы определить, кто и как нагружает CPU и Память в Linux. Традиционно напоминаю, что это не сборник лучших решений и инструментов. Это просто мой личный опыт. Не обязательно, что я всё делаю правильно и оптимально.

Сколько памяти занимает процесс. На примере mysqld.
ps -o vsz,rss,cmd --pid $(pgrep mysqld)

Список процессов с сортировкой по нагрузке на CPU.
ps aux --sort -pcpu

Этот список можно ограничить только десятью самыми прожорливыми процессами.
ps aux --sort=-pcpu,+pmem | head -n 11

Список процессов с сортировкой по занимаемой памяти.
ps aux --sort -rss
ps aux --sort -vsz

Наблюдаем через top за конкретным процессом.
top -c -p $(pgrep -d',' -f mysqld)

Информация о загрузке каждого ядра процессора. Утилита mpstat входит в состав пакета sysstat. Обычно в системных репах она есть.
mpstat -P ALL

Загрузка процессора в %. Этой простой метрики очень не хватает в Linux, особенно когда переходишь с Windows. Все колхозят на свой лад, чтобы получить эту метрику. Вот 2 варианта, которые есть у меня. При грубой прикидке, результат получается близкий к реальности.
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}'

awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' <(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)

Текстовый вывод нагрузки на процессор в консоль. Ингода бывает удобно выводить с каким-то интервалом информацию о нагрузке в консоль. Например, делать это в течении 60 секунд с интервалом в секунду можно с помощью sar, которая тоже есть в sysstat
sar 1 60

Определить, кто родитель процесса. Например, если указать pid worker процесса nginx, команда ниже покажет pid процесса master. В случае с nginx это не имеет большого смысла, но иногда нужно.
ps -o ppid= -p 5606

Посмотреть информацию о процессоре.
lscpu

В завершении скажу про полезную репу, которую я регулярно использую при анализе загрузки систем - https://github.com/brendangregg/perf-tools Там много полезных утилит. В контексте данной заметки для анализа процессов я использовал утилиту execsnoop.

Следующая подборка будет на тему анализа нагрузки на дисковую подсистему. Думаю, это будет поинтереснее. Изначально хотел всё в одной сделать, но потом понял, что лучше разделить, чтобы в избранное можно было по тематике разнести.

#bash
👍3


>>Click here to continue<<

ServerAdmin.ru






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)