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

Используете ftrace для отслеживания создаваемых файлов?

Мы находимся в таком сценарии: https://stackoverflow.com/questions/7304826/how-to-debug-a-multithreaded-hung-process-in-linux

Когда мы пытаемся посмотреть на мошеннический процесс (который потребляет 100% ЦП), он находится в таком состоянии:

ls -l /proc/XXXX/fd 
lrwx------ 1 root root 64 Feb  1 16:08 9 -> /tmp/.ZendSem.sdiU42 (deleted)

Мы хотели бы знать, что было в файле (который теперь удален), чтобы попытаться отследить причину проблемы. Я думаю, что ftrace может это сделать (или, может быть, другой инструмент), но я не знаю, как это сделать.

/tmp/.ZendSem.sdiU42 это файл блокировки, который был намеренно удален сразу после создания. Этого достаточно, чтобы предотвратить снятие этой блокировки другими потоками. У него также есть приятное свойство исчезать после завершения процесса. См. Исходники php: ext / opcache / zend_shared_alloc.c


Вам нужно собрать гораздо больше контекста о том, что делает ваше приложение, и как это взаимодействует с программным стеком и ядром.

Определите PID в журналах веб-сервера и посмотрите, сможете ли вы идентифицировать что-нибудь, возможно, когда воркер был разветвлен.

Профиль исполнения. В Linux запустите perf top и посмотрите, где это больше всего времени. Устанавливайте символы отладки для этой программы и ядра, пока не сможете разобраться в именах функций. Также попробуйте ltrace если вы хотите что-то вроде strace но для вызовов пользовательской библиотеки.