我正在使用dtruss
在OSX 10.13上跟踪一个进程,试图了解它在执行套接字连接时冻结的原因。但是当它到达connect
时,跟踪器会冻结,然后在屏幕上显示783 dynamic variable drops with non-empty dirty list
。因此,理解这个过程冻结的原因并没有多大帮助!
"动态变量与非空脏列表一起下降"意思?以及如何使用dtruss / dtrace了解我的进程冻结的原因?
我在osx 10.13上
答案 0 :(得分: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指的是相同的问题和文档。
在macOS上查看/ usr / bin / dtruss,
-b bufsize # dynamic variable buf size
对应于dynvarsize
。