strace в Linux не регистрирует все вызовы open()
Я использую strace для захвата вызовов open(), close() и read() в Linux. Целевым процессом является веб-сервер причала. Насколько я могу судить, strace не регистрирует все вызовы open(). Может быть, другие тоже, я не пытался соотнести файловые дескрипторы с вызовами open().
Например, начальная строка:
strace -f -e trace = открыть, закрыть, прочитать -o/tmp/strace.out -p62881
Затем я использую wget для получения 100 статических файлов; все были успешно найдены. За один прогон было зарегистрировано только 56 открытых событий; при другом запуске 100 различных файлов я получил 66 открытых событий.
Я считаю, что использование "-f" приводит к тому, что strace присоединяется ко всем LWPID для потоков ("Процесс 62881 подключен с 25 потоками - прерывание для выхода"); Когда я пытаюсь явно присоединиться ко всем, используя несколько параметров "-p", я получаю одно сообщение об успешном присоединении, но несколько сообщений "Операция не разрешена", по одному для каждого дочернего PID.
Я перезапустил Jetty, чтобы очистить кеш перед тестами.
Версия ядра - 2.6.32-504.3.3.el6.x86_64 (Red Hat). Версия пакета Strace: strace-4.5.19-1.19.el6.x86_64.
Что мне не хватает?
Спасибо
2 ответа
В некоторых системах вы должны использовать openat() вместо open().
Пытаться:
strace -f -e trace=openat,close,read -o/tmp/strace.out -p62881
Пытаться -ff
(в дополнение к -f
):
-ff: If the -o filename option is in effect, each processes trace is written to filename.pid where pid is
the numeric process id of each process. This is incompatible with -c, since no per-process counts are
kept.