Назад | Перейти на главную страницу

Эффективное использование strace

Прямо сейчас я имею дело с клиентским сайтом на основе php, который каким-то образом забивает все доступные процессы, которые он имеет с его провайдером общего хостинга. Я хотел бы доказать ему, что именно и сколько процессов выполняется одновременно, когда в браузере загружается определенная страница индекса. Я могу видеть около 5 или 6 всплывающих окон наверху, но все они уходят и возвращаются так быстро, что я не могу найти ни капли на каком-либо конкретном pid для отслеживания.

У кого-нибудь есть идея, как я могу предвидеть номер pid, за которым я должен следить, чтобы узнать, что конкретно делает его сайт?

Интересно, будет ли следующая концепция слишком медленной (даже если написана сценарием), чтобы поймать pid:

  1. Делать inotifywait дождитесь доступа к определенной странице индекса.
  2. Настроить inotifywait для запуска

strace -o /tmp/wtf -f -e trace=process -p $(lsof -t /path/to/specific/index.php)

Или что-то подобное. Это было просто безумное предположение, хотя на самом деле это не так.

Смотрите также: XDebug и KCacheGrind.

Используйте ps или pstree, чтобы найти родительский pid для всего, что вы хотите отследить, я предполагаю, что это, вероятно, apache? Затем используйте -f вариант strace, чтобы он также следовал за всеми дочерними идентификаторами. Наконец, если у вас есть относительно недавняя версия strace, вы можете просто отслеживать активность процесса с помощью -e trace=process.

Собираем все вместе и предполагаем, что ваш родительский процесс apache - pid 1234:

strace -o logfile.txt -f -e trace=process -p1234

должен доставить вас довольно близко к тому месту, куда вы хотите пойти.