免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1501 | 回复: 2
打印 上一主题 下一主题

请各位大侠指点awk程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-17 15:18 |只看该作者 |倒序浏览
informix的一个监控命令onstat -g glo 输出如下:


  1. $ onstat -g glo

  2. Informix Dynamic Server Version 7.31.FD1    -- On-Line -- Up 18 days 22:14:12 -- 3157168 Kbytes

  3. MT global info:
  4. sessions threads  vps      lngspins
  5. 52       201      13       2

  6.           sched calls     thread switches yield 0   yield n   yield forever
  7. total:    3611332061      1735679186      2009113064 62366160  731801533
  8. per sec:  518             0               518       0         0

  9. Virtual processor summary:
  10. class       vps       usercpu   syscpu    total
  11. cpu         3         534593.39  19518.69  554112.08
  12. aio         2         32.76     76.53     109.29
  13. lio         1         12.51     34.89     47.40
  14. pio         1         12.51     35.15     47.66
  15. adm         1         67.20     121.64    188.84
  16. soc         3         2224.96   28468.82  30693.78
  17. msc         1         32.63     55.58     88.21
  18. adt         1         28.04     61.48     89.52
  19. total       13        537004.00  48372.78  585376.78

  20. ...未完
复制代码


我想相隔一段时间执行两次onstat -g glo,将两次数据相减,观察各种VP的利用率。
于是利用awk写了脚本实现,由于第一次实践,希望各位大侠指点一下,看看怎样做更好。
谢谢!


  1. #!/usr/bin/sh
  2. if [ $# -ne 1 ]
  3. then
  4.   echo "  Usage: onstat_glo INTERVAL "
  5.   exit
  6. fi

  7. INV=$1;  export INV
  8. OUT1=/tmp/onstat_glo.out1
  9. OUT2=/tmp/onstat_glo.out2
  10. export OUT1 OUT2

  11. onstat -g glo > $OUT1
  12. sleep $INV
  13. onstat -g glo > $OUT2

  14. awk ' \
  15. BEGIN {
  16.   while( getline < ENVIRON["OUT1"] >0 ) {
  17.     if ($1 == "cpu") { cpu1 = $5 }
  18.     if ($1 == "aio") { aio1 = $5 }
  19.     if ($1 == "lio") { lio1 = $5 }
  20.     if ($1 == "pio") { pio1 = $5 }
  21.     if ($1 == "adm") { adm1 = $5 }
  22.     if ($1 == "soc") { soc1 = $5 }
  23.     if ($1 == "msc") { msc1 = $5 }
  24.     if ($1 == "adt") { adt1 = $5 }
  25.   }
  26.   while( getline < ENVIRON["OUT2"] >0 ) {
  27.     if ($1 == "cpu") { cpu2 = $5 }
  28.     if ($1 == "aio") { aio2 = $5 }
  29.     if ($1 == "lio") { lio2 = $5 }
  30.     if ($1 == "pio") { pio2 = $5 }
  31.     if ($1 == "adm") { adm2 = $5 }
  32.     if ($1 == "soc") { soc2 = $5 }
  33.     if ($1 == "msc") { msc2 = $5 }
  34.     if ($1 == "adt") { adt2 = $5 }
  35.   }
  36. }
  37. END {
  38.   printf (" cpu vp : %6.2f %\n", (cpu2-cpu1)/inv*100 )
  39.   printf (" aio vp : %6.2f %\n", (aio2-aio1)/inv*100 )
  40.   printf (" lio vp : %6.2f %\n", (lio2-lio1)/inv*100 )
  41.   printf (" pio vp : %6.2f %\n", (pio2-pio1)/inv*100 )
  42.   printf (" adm vp : %6.2f %\n", (adm2-adm1)/inv*100 )
  43.   printf (" soc vp : %6.2f %\n", (soc2-soc1)/inv*100 )
  44.   printf (" msc vp : %6.2f %\n", (msc2-msc1)/inv*100 )
  45.   printf (" adt vp : %6.2f %\n", (adt2-adt1)/inv*100 )
  46. }
  47. ' inv=$INV /dev/null

  48. rm $OUT1 $OUT2

复制代码
[/code]

论坛徽章:
0
2 [报告]
发表于 2003-05-18 13:31 |只看该作者

请各位大侠指点awk程序

如果你仅仅是想计算各个vp的利用率的话,可以将两次命令之间的间隔巧妙的选择以下就可以了,比如取100秒,那么两次相减正好是过去100秒内各个vp的实际使用时间,这在概念上刚好与百分比不谋而合。下面是我监控vp使用情况的shell部分代码,你可以试试。
  1. #!/bin/sh
  2. onstat -g glo|awk '{print $3}'|sed -e '1,/^class/d' -e '/^$/d'|sed '$d' >/tmp/glotmp1
  3. onstat -g glo|awk '{print $6}'|sed -e '1,/total/d' -e '/^$/d'  >/tmp/glotmp2
  4. sleep 100
  5. onstat -g glo|awk '{print $6}'|sed -e '1,/total/d' -e '/^$/d' -e 's/$/ -/' >/tmp/glotmp3
  6. paste /tmp/glotmp3 /tmp/glotmp2|bc >/tmp/glotmp4
  7. paste /tmp/glotmp1 /tmp/glotmp4|awk '{printf"%s %12.2f\n",$1,$2}'
  8. rm -f /tmp/glotmp?
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-05-20 14:06 |只看该作者

请各位大侠指点awk程序

原帖由 "muzx" 发表:
paste /tmp/glotmp3 /tmp/glotmp2|bc >/tmp/glotmp4


又学了一招,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP