Эффективное использование strace
Прямо сейчас я имею дело с клиентским сайтом на php, который каким-то образом забивает все доступные процессы, которые он имеет со своим провайдером общего хостинга. Я хотел бы доказать ему, что именно и сколько процессов выполняется в тот момент, когда в браузер загружается определенная страница индекса. Я могу видеть около 5 или 6 всплывающих окон одновременно, но все они уходят и возвращаются так быстро, что я не могу проследить какой-либо конкретный пид.
У кого-нибудь есть представление о том, как я могу предвидеть номер pid, за которым я должен следить, чтобы узнать, что конкретно делает его сайт?
2 ответа
Используйте ps или pstree, чтобы найти родительский pid для всего, что вы хотите отследить. Я предполагаю, что это, вероятно, apache? Затем используйте -f
опция strace, поэтому она также следует всем дочерним файлам. Наконец, если у вас есть относительно недавние изменения, вы можете просто проследить активность процесса с помощью -e trace=process
,
Собираем все вместе и предполагаем, что ваш родительский процесс apache - это pid 1234:
strace -o logfile.txt -f -e trace=process -p1234
должен приблизить вас к тому, куда вы хотите пойти.
Интересно, будет ли следующая концепция слишком медленной (даже если она написана на скрипте), чтобы поймать pid:
- Делать
inotifywait
дождитесь доступа к определенной странице индекса. - конфигурировать
inotifywait
для запуска
strace -o /tmp/wtf -f -e trace=process -p $(lsof -t /path/to/specific/index.php)
Или что-то подобное. Это было просто дикое предположение, фактически не пытаясь выше.
Смотрите также: XDebug и KCacheGrind.