4

我正在跟踪 OSX 10.13 上的进程,dtruss试图了解为什么它在进行套接字连接时冻结。但是,当它到达connect示踪剂时,它会冻结,然后显示783 dynamic variable drops with non-empty dirty list在屏幕上。因此,对于理解该过程为何冻结并没有太大帮助!

“动态变量丢弃与非空脏列表”是什么意思?以及我如何才能了解为什么我的进程使用 dtruss/dtrace 冻结?

我在 osx 10.13

4

1 回答 1

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

于 2019-06-26T20:55:09.417 回答