Что означает "динамическая переменная с непустым грязным списком" в 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
.