907просмотров
5 марта 2025 г.
Score: 998
Как использовать ltrace, fatrace, ps, lsof для диагностики linux серверов. ⇨ ltrace — очень похоже на strace, но вместо syscall показывает обращения к динамически подключенным библиотекам (glibc и других). Использовать можно также указывая PID процесса через -p. Использую в дополнение к strace, когда его становится не достаточно и надо взглянуть на внутренности процесса немного под другим углом. ⇨ fatrace — выводит все обращения к файлам как для указанного процесса, так и в целом для всей системы. Можно фильтровать как по процессу (чтобы посмотреть как он нагружает диск и какие файлы использует), так и по конкретному файлу (чтобы узнать, какие процессы к нему обращаются). Также удобно использовать при поиске того, что нагружает диск в целом. ⇨ ps — инфа по текущим запущенным процессам. Стандартное использование ps ax для дальнейшей обработки в awk. Например, прибиваем все python скрипты: ps ax | grep python | awk '{print $1}' | xargs kill. Также можно просто написать ps aux для того, чтобы посмотреть, что запущено не так давно (поиск зловредов или каких-то аномалий). Флагов очень много, например, f чтобы увидеть дерево процессов или e чтобы увидеть ENV переменные для каждого процесса.
⇨ lsof — показывает открыте файлы. Может использоваться как для конкретного процесса (-p PID), так и в целом по всему серверу. По процессу используем, чтобы посмотреть сколько файлов он открывает и что это за файлы. Например, чтобы найти где лежат конфиги, логи и тп. Открытые сокеты тоже показывает, так что можно увидеть куда открыты коннекты и на чем сейчас завис процесс (долгий HTTP или БД запрос). Без указания конкретного процесса полезно, например, lsof | grep deleted, чтобы найти открытые файлы, которые были удалены с диска. При этом, пока такой мертвый файл висит открытым, то место на диске не освобождается, так что иногда полезно проверить нет ли какого-то зависшего мусора.