2016-02-15 2 views
1

Я пытаюсь собрать статистику через kstat, которую я сейчас использую dtrace для сбора.print kstat при обновлении (несколько раз в 1 секунду)

Это не счетная информация, а новые данные каждый раз.

Минимальный интервал на печать kstat составляет 1 секунду. Однако данные, которые мне нужны, меняются несколько раз за секунду. Есть ли способ (API) для получения данных из kstat всякий раз, когда обновляется kstat, который не использует dtrace?

+0

Мне любопытно, какую проблему вы пытаетесь решить здесь. Одна вещь, о которой вы должны знать, это то, что каждый раз, когда вы читаете kstat, вся цепочка kstat для системы должна пройтись, чтобы получить тот, который вы хотите. Чем чаще вы это делаете, тем больше будет загрузка, которую вы будете размещать в системе, и тем более будет нарушен ваш мониторинг. –

+0

@JamesMcPherson spa sync stats – Iceman

+0

Я все еще не понимаю, почему вам нужно получать эти данные более одного раза в секунду. –

ответ

1

Внешний вид: dtrace, нет возможности получить статистику при их обновлении, однако C libkstat API позволяет получать статистику kstat с произвольной частотой выборки второй секунды.

Существует также perl api, если вы хотите сделать это со сценариями.

Очень простой способ использовать его - создать настраиваемую команду kstat (которая уже является скриптом perl с использованием kstat perl api) и изменить его, чтобы использовать таймеры с высоким разрешением вместо стандартного, например:

$ 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 
+0

Kstat - это скрипт, поэтому он должен использовать API. Проблема решена. Спасибо! – Iceman

Смежные вопросы