Что означает "динамическая переменная с непустым грязным списком" в dtrace?

Я отслеживаю процесс на OSX 10.13, используя dtruss пытаясь понять, почему он зависает при подключении к сокету. Однако, когда он достигает connect трассировщик зависает и затем отображает 783 dynamic variable drops with non-empty dirty list на экране. Так что это не сильно помогает в понимании того, почему процесс замораживается!

Что означает "динамическая переменная отбрасывается с непустым грязным списком"? и как я могу понять, почему мой процесс зависает с помощью dtruss/dtrace?

Я на OSX 10,13

0 ответов

Вы пробовали -b bufsize вариант упомянутый в комментариях?

В пользовательском скрипте DTrace (а не в оболочке dtruss) я смог решить аналогичную проблему, настроив параметры cleanrate и dynvarsize:

#pragma D option cleanrate=50hz
/*
    "dirty" variable drops per <my use case>
    default -> ~20k
    10 Hz -> ~15k
    20 Hz -> ~10k
    30 Hz -> ~2k
    40 Hz -> ~1k
    50 Hz (max) -> < 200
*/

#pragma D option dynvarsize=400000     
/*
     10,000 @ 50 Hz -> ~25k+
    100,000 @ 50 Hz -> ~20k  
    200,000 @ 50 Hz -> ~3k
    300,000 @ 50 Hz -> ~1k
    400,000 @ 50 Hz -> 0
    400,000 @ 25 Hz -> ~2k
    500,000 @ 25 Hz -> ~1k
*/

Я понял это, прочитав http://blogs.sun.com/roller/resources/bmc/dtrace_tips.pdf

https://community.oracle.com/thread/1921528 относится к той же проблеме и документу.

Глядя на / usr / bin / dtruss в macOS,

          -b bufsize      # dynamic variable buf size

соответствует dynvarsize.

Другие вопросы по тегам