【问题标题】:print kstat when updated (multiple times in 1 second)更新时打印 kstat(1 秒内多次)
【发布时间】:2016-02-15 21:05:57
【问题描述】:

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

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

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

【问题讨论】:

  • 我很好奇你想在这里解决什么问题。您应该注意的一件事是,每次读取 kstat 时,都必须遍历系统的整个 kstat 链以获取您想要的。您执行此操作的次数越多,您对系统施加的负载就越大,您的监控就会受到越多的干扰。
  • @JamesMcPherson spa 同步统计数据
  • 我仍然不清楚为什么您需要每秒多次获取该数据。
  • 我正在收集每个 spa_sync 周期的数据。这可能不到一秒。

标签: solaris opensolaris kstat


【解决方案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

【讨论】:

  • Kstat 是一个脚本,所以它必须使用 API。问题已解决..谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-10-16
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多