为了允许进行自定义,DTrace 为其使用者提供了多种重要的自由度。为最大限度地降低需要特定调整的可能性,DTrace 将通过使用合理的缺省值和灵活的缺省策略来实现。但是,可能会出现要求基于各个使用者调整 DTrace 行为的情况。本章介绍 DTrace 选项和可调参数,以及可用于修改它们的接口。
通过设置或启用这些选项,可对 DTrace 进行调整。下表中说明了可用的选项。对于一些选项,dtrace(1M) 提供了对应的命令行选项。
表 16–1 DTrace 使用者选项
选项名 |
值 |
dtrace(1M) 别名 |
说明 |
参见章节 |
---|---|---|---|---|
aggrate |
time |
聚合读取的速率 | ||
aggsize |
size |
聚合缓冲区大小 | ||
bufresize |
auto 或 manual |
缓冲区调整大小策略 | ||
bufsize |
size |
-b |
主体缓冲区大小 | |
cleanrate |
time |
清除速率。必须以每秒次数为单位指定,且带有 hz 后缀。 | ||
cpu |
scalar |
-c |
启用跟踪的 CPU | |
defaultargs |
— |
允许引用未指定的宏参数 | ||
destructive |
— |
-w |
允许破坏性操作 | |
dynvarsize |
size |
动态变量空间大小 | ||
flowindent |
— |
-F |
缩进函数输入并加前缀 ->;取消缩进函数返回并加前缀 <- | |
grabanon |
— |
-a |
声明匿名状态 | |
jstackframes |
scalar |
jstack() 的缺省栈帧数 | ||
jstackstrsize |
scalar |
jstack() 的缺省字符串空间大小 | ||
nspec |
scalar |
推理数 | ||
quiet |
— |
-q |
仅输出显式跟踪的数据 | |
specsize |
size |
|
推理缓冲区大小 | |
strsize |
size |
字符串大小 | ||
stackframes |
scalar |
栈帧数 | ||
stackindent |
scalar |
缩进 stack() 和 ustack() 输出时要使用的空格字符数 | ||
statusrate |
time |
状态检查的速率 |
|
|
switchrate |
time |
缓冲区切换的速率 | ||
ustackframes |
scalar |
用户栈帧数 |
对于表示大小的值,可以根据需要指定 k、m、g 或 t 作为后缀,以分别表示千字节、兆字节、千兆字节和兆兆字节。对于表示时间的值,可以根据需要指定 ns、us、ms、s 或 hz 作为后缀,以分别表示纳秒、微秒、毫秒、秒和每秒次数。
在 D 脚本中,可以使用 #pragma D,并后跟字符串 option 和选项名称来设置选项。如果选项接受一个值,则该选项名称后应跟等号 (=) 和选项值。以下示例都是有效的选项设置:
#pragma D option nspec=4 #pragma D option grabanon #pragma D option bufsize=2g #pragma D option switchrate=10hz #pragma D option aggrate=100us #pragma D option bufresize=manual
dtrace(1M) 命令还可在命令行中接受选项设置,作为 -x 选项的参数。例如:
# dtrace -x nspec=4 -x grabanon -x bufsize=2g \ -x switchrate=10hz -x aggrate=100us -x bufresize=manual |
如果指定的选项无效,dtrace 将指示该选项名称无效并退出:
# dtrace -x wombats=25 dtrace: failed to set option -x wombats: Invalid option name # |
同样,如果给定选项的选项值无效,dtrace 将指示该值无效:
# dtrace -x bufsize=100wombats dtrace: failed to set option -x bufsize: Invalid value for specified option # |
如果多次设置某选项,则后续设置将覆写先前的设置。某些选项(如 grabanon)只能设置。此类选项表现为,您可以对其进行设置,但以后将无法取消该设置。
为启用匿名而设置的选项将由声明匿名状态的 DTrace 使用者接受。有关启用匿名跟踪的信息,请参见第 36 章。