Что такое strace?
Это «рентгеновский аппарат» для Linux-процессов. Он показывает все системные вызовы, которые делает программа: работа с файлами, сетевые соединения, управление памятью и многое другое.
👀 Практический пример:
Допустим, наш процесс не может записать в файл. Вместо перезапусков и логов просто запускаем:
strace -p <PID> -f -e trace=file
И видим примерно такую картину:
open("/var/log/app.log", O_WRONLY|O_CREAT) = -1 EACCES (Permission denied) write(2, "Permission denied", 17) = 17
Вот и ответ! Процессу не хватает прав на запись в /var/log/app.log.
📌 Как начать использовать strace: 📌
1️⃣ Для запуска новой программы:
strace -f -o trace.log your_command
2️⃣ Для подключения к работающему процессу:
strace -p <PID> -o trace.log
3️⃣ Полезные фильтры:
strace -e trace=network # только сетевые вызовы strace -e trace=file # только работа с файлами strace -e trace=memory # управление памятью
🧠 Что можно узнать с помощью strace:
- 🔹 Почему процесс не может прочитать конфигурационный файл
- 🔹 Куда именно он пытается писать логи
- 🔹 С какими портами устанавливает соединения
- 🔹 Какие библиотеки загружает при старте
- 🔹 Почему зависает при определённых операциях
🚩 Важный момент: strace немного замедляет работу процессов, поэтому в продакшене используйте его аккуратно и кратковременно.
🔥 Этот инструмент особенно полезен когда:
- 🔸 Логи не дают ответа что пошло не так
- 🔸 Работаете с чужим кодом без документации
- 🔸 Нужно быстро диагностировать проблему на сервере