2006年12月27日星期三

vmstat命令中增加时间戳


前阵子,利用vmstat生成的实时性能数据文件,美中不足是没有时间信息,缺少一个时间戳,测试结束后开发在debug问题的时候,往往需要定位性能瓶颈发生的具体时间,因此,需要为vmstat性能文件添加一个时间戳.

利用强大的awk即可实现这个功能,如下:

[autoadm@AUTOTEST-ATS ATSLib]$ vmstat 2 5 | awk '{print strftime("%H:%M:%S") $0}'
17:08:07 procs memory swap io system cpu
17:08:07 r b w swpd free buff cache si so bi bo in cs us sy id
17:08:07 1 0 0 8 316280 251760 995400 0 0 23 75 120 108 1 1 98
17:08:09 0 0 0 8 316280 251760 995400 0 0 0 12 105 70 0 2 98
17:08:12 0 0 0 8 316280 251760 995400 0 0 0 344 113 75 0 0 100
17:08:14 0 0 0 8 316072 251760 995400 0 0 0 0 116 167 6 2 92
17:08:16 0 0 0 8 316072 251760 995400 0 0 0 340 114 76 0 0 100
[autoadm@AUTOTEST-ATS ATSLib]$

其中的命令strftime好像在solaris下面不行,不知道是否因为strftime函数的缘故?如果是这样,用系统命令date应该也可以,尝试如下:

[autoadm@AUTOTEST-ATS ATSLib]$ vmstat 2 5 | awk '{ system("date +%H:%M:%S"); print $0}'
17:10:25
procs memory swap io system cpu
17:10:25
r b w swpd free buff cache si so bi bo in cs us sy id
17:10:25
0 0 0 8 316092 251764 995584 0 0 23 75 120 108 1 1 98
17:10:27
0 0 0 8 316092 251764 995584 0 0 0 98 109 77 0 0 100
17:10:29
0 0 0 8 315884 251764 995584 0 0 0 0 117 174 5 3 92
17:10:31
0 0 0 8 315892 251764 995584 0 0 0 348 137 97 0 0 100
17:10:33
0 0 0 8 315888 251764 995584 0 0 0 12 157 200 16 3 80
[autoadm@AUTOTEST-ATS ATSLib]$

不过这样也有一个缺陷,就是时间和性能数据分在了两行, 不知有什么好办法可以搞到一行?


其实不仅仅是vmstat,其他的不带时间戳的命令都可以用这种方法得到时间戳.


--end

0 Comments: