1

我正在尝试通过我目前使用 dtrace 收集的 kstat 收集统计信息。

它不是基于计数的信息,而是每次都有新数据。

kstat 打印的最小间隔是 1 秒。但是,我需要的数据在一秒钟内更改了几次。有没有一种方法(API)可以在不使用 dtrace 的 kstat 更新时从 kstat 获取数据?

4

1 回答 1

1

在 之外dtrace,没有办法在更新时获取统计信息,但是C libkstat API允许kstat以任意亚秒级采样率检索统计信息。

如果你想用脚本来做,还有一个perl api 。

使用它的一个非常简单的方法是创建一个自定义kstat命令(它恰好已经是一个利用 kstat perl api 的 perl 脚本)并将其修改为使用高分辨率计时器而不是默认计时器,例如:

$ sed '
s/sleep($interval);/Time::HiRes::usleep($interval*1000.);/
/use Sun::Solaris::Kstat/a\
use Time::HiRes;
' /usr/bin/kstat > /var/tmp/kstat_ms
$ chmod +x /var/tmp/kstat_ms
$ /var/tmp/kstat_ms -n lo0 500 3

module: lo                              instance: 0
name:   lo0                             class:    net
        crtime                          19.559031813
        ipackets                        532
        opackets                        532
        snaptime                        4309.506435597


module: lo                              instance: 0
name:   lo0                             class:    net
        crtime                          19.559031813
        ipackets                        534
        opackets                        534
        snaptime                        4310.008578348


module: lo                              instance: 0
name:   lo0                             class:    net
        crtime                          19.559031813
        ipackets                        536
        opackets                        536
        snaptime                        4310.511617682
于 2016-02-15T23:11:52.120 回答