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.
Другие вопросы по тегам