什么"动态变量与非空脏列表一起下降"在dtrace中意味着什么?

时间:2018-03-16 08:16:54

标签: macos debugging dtrace dtruss

我正在使用dtruss在OSX 10.13上跟踪一个进程,试图了解它在执行套接字连接时冻结的原因。但是当它到达connect时,跟踪器会冻结,然后在屏幕上显示783 dynamic variable drops with non-empty dirty list。因此,理解这个过程冻结的原因并没有多大帮助!

"动态变量与非空脏列表一起下降"意思?以及如何使用dtruss / dtrace了解我的进程冻结的原因?

我在osx 10.13上

1 个答案:

答案 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