- 论坛徽章:
- 0
|
nfsstat输出的结构如下:
Server nfs v2:
null getattr setattr root lookup readlink
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
read wrcache write create remove rename
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
link symlink mkdir rmdir readdir fsstat
0 0% 0 0% 0 0% 0 0% 0 0% 0 0%
Client nfs v3:
null getattr setattr lookup access readlink
0 0% 38042 82% 0 0% 1577 3% 5791 12% 0 0%
read write create mkdir symlink mknod
553 1% 0 0% 0 0% 0 0% 0 0% 0 0%
remove rmdir rename link readdir readdirplus
0 0% 0 0% 0 0% 0 0% 3 0% 0 0%
fsstat fsinfo pathconf commit
59 0% 59 0% 0 0% 0 0%
运行nfsstat每分钟,并把输出定向到一个文本文件。
需要提取各种操作的数量, 和每秒的平均数。
grep -A9 "Server nfs v3" text-file > new-text-file
awk ‘/\/ {getline; print}’ new-text-file | sed –n ‘1~10p’ | awk ‘ print NR, $1’ | awk ‘{a[$1]=$2} END {for (i=2;i print (a-a[i-1])/600}’
第一,awk搜索需要的关键词,例如read, write, getattr, 注意还有readdir等, 所以用了正则表达式\来匹配仅仅read这个词, 匹配后awk会打印匹配的下一行, 而不是当前行, 因为我们需要的是IO的具体数字。
第二,sed用于每10行抽取一行, 这个是因为我使用的log是没分钟的记录一次NFSSTAT,对于一天来说,数据太多。没10行打印一行,一天有144行。
第三,awk,用于从行中抽取数据, 并在前面加上行号。read对应的数据在第一列, 所以是打印$1;如果是write,相应的$1要换成$3。 NR的作用是在数据前面加上行号,这是为了后面一条awk的数组操作做准备。
第四,awk,将数据按照行号赋值给数组, 并使用数组中后一个数据减掉前一个数据, 得到10分钟时段内的总的IO数, 除以600, 得到每秒的IO数。输出文件为单列的文本文件。
使用EXCEl很方便的可以处理这个文本文件,可以比较方便的得到每种操作的每秒品均数。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/14914/showart_479060.html |
|