我正在跟踪 OSX 10.13 上的进程,dtruss
试图了解为什么它在进行套接字连接时冻结。但是,当它到达connect
示踪剂时,它会冻结,然后显示783 dynamic variable drops with non-empty dirty list
在屏幕上。因此,对于理解该过程为何冻结并没有太大帮助!
“动态变量丢弃与非空脏列表”是什么意思?以及我如何才能了解为什么我的进程使用 dtruss/dtrace 冻结?
我在 osx 10.13
您是否尝试-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指的是同一个问题和文档。
查看 macOS 上的 /usr/bin/dtruss,
-b bufsize # dynamic variable buf size
对应dynvarsize
。