偶尔,系统可能会因为没有足够的可用内存,或者 DTrace 使用者超出第 16 章中说明的某项可调整限制,而没有足够可用的内核内存来分配所需大小的缓冲区。可以使用 bufresize 选项(缺省为 auto)配置缓冲区分配失败的策略。在 auto 缓冲区调整大小策略下,将平均分配缓冲区大小,直到成功进行分配。如果分配的缓冲区小于请求的大小,dtrace(1M) 将生成一条消息:
# dtrace -P syscall -b 4g dtrace: description 'syscall' matched 430 probes dtrace: buffer size lowered to 128m ... |
或者:
# dtrace -P syscall'{@a[probefunc] = count()}' -x aggsize=1g dtrace: description 'syscall' matched 430 probes dtrace: aggregation size lowered to 128m ... |
或者,可以通过将 bufresize 设置为 manual,要求在缓冲区分配失败之后进行手动干预。在此策略下,分配失败将会导致 DTrace 启动失败:
# dtrace -P syscall -x bufsize=1g -x bufresize=manual dtrace: description 'syscall' matched 430 probes dtrace: could not enable tracing: Not enough space # |
所有缓冲区(主体、推理和聚合)的缓冲区调整大小策略都由 bufresize 选项指定。