Что такое 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.

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 немного замедляет работу процессов, поэтому в продакшене используйте его аккуратно и кратковременно.

🔥 Этот инструмент особенно полезен когда:

  • 🔸 Логи не дают ответа что пошло не так
  • 🔸 Работаете с чужим кодом без документации
  • 🔸 Нужно быстро диагностировать проблему на сервере