我正在使用dtruss跟踪OSX10.13上的一个进程,试图了解为什么它在进行套接字连接时冻结。但是,当它到达connect时,跟踪程序冻结,然后在屏幕上显示783 dynamic variable drops with non-empty dirty list。因此,这对理解进程冻结的原因没有太大帮助!
“动态变量丢弃非空脏列表”是什么意思?如何使用dtruss/dtrace深入了解我的进程冻结的原因?
我在osx 10.13上
发布于 2019-06-27 04:55:09
你有没有尝试评论中提到的-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。
https://stackoverflow.com/questions/49315934
复制相似问题