Archive for Linux

使用awk统计log信息

假设我们在应用中会将执行时间超过设定阀值的函数都打印出来,内容如下
2006-01-11 07:52:00,222 FATAL – Call class com.cyber.ldap.LdapMemberDAO.getMemberById take 312 ms.
2006-01-11 07:52:00,404 ERROR – Call class com.cyber.dao.ArticleSearchImpl.getArticle take 180 ms.
2006-01-11 07:52:00,536 ERROR – Call class com.cyber.member.ProfileManager.getMemberById take 632 ms.
2006-01-11 07:52:13,193 FATAL – Call class com.cyber.dao.IbatisArticleDAO.getArticleWithDetail take 644 ms.
2006-01-11 07:52:13,339 FATAL – Call class com.cyber.dao.IbatisCommentDAO.getComments take 123 ms.
2006-01-11 07:52:00,222 FATAL – Call class com.cyber.ldap.LdapMemberDAO.getMemberById take 434 ms.
2006-01-11 07:52:00,404 ERROR – Call class com.cyber.dao.ArticleSearchImpl.getArticle take 642 ms.
2006-01-11 07:52:00,536 ERROR – Call class com.cyber.member.ProfileManager.getMemberById take 1234 ms.
2006-01-11 07:52:13,193 FATAL – Call class com.cyber.dao.IbatisArticleDAO.getArticleWithDetail take 44 ms.
2006-01-11 07:52:13,339 FATAL – Call class com.cyber.dao.IbatisCommentDAO.getComments take 1231 ms.

现在我们需要统计这些执行慢的方法的平均执行时间及执行次数,好找到问题来进行性能调优,所以写了一段简单的awk脚本
BEGIN{c=0;n=0;cnt=0;print “total\tcnt\tavg\tmethod”;}
{ if(n==0){
    n=1;na=$1;c=$2;cnt=1;
  }else if(n==1){
    if(na==$1){
       c+=$2;
       cnt++;
    }else {
       avg=c/cnt;
       print c”\t”cnt”\t”avg”\t”na;
       na=$1;c=$2;cnt=1;
    }
  }
}
将这段程序保存到文件stat.awk里(随便你了)

然后执行cat performance.log | awk ‘{print $7″ “$9}’|sort -k 1 |awk -f stat.awk |sort -nrk 3
就可以得到结果了
2708    2       677     com.cyber.dao.IbatisCommentDAO.getComments
1644    2       411     com.cyber.dao.ArticleSearchImpl.getArticle
3732    2       373     com.cyber.member.ProfileManager.getMemberById
1492    2       373     com.cyber.ldap.LdapMemberDAO.getMemberById
1376    2       344     com.cyber.dao.IbatisArticleDAO.getArticleWithDetail

很简单,但是很有用

还是稍微解释一下吧
1. cat performance.log不用说了吧,就是输出performance.log的内容
2. awk ‘{print $7″ “$9}’ 就是找出一行:
    2006-01-11 07:52:00,222 FATAL – Call class com.cyber.ldap.LdapMemberDAO.getMemberById take 312 ms.
   中方法名和时间这两个字段
3. sort -k 1 表示将结果按第一列排序
4. awk -f stat.awk 就是执行我们上面的程序,统计出每个方法的执行次数,总执行时间和平均执行时间,并打印出来
5. sort -nrk 3 表示按第三列以数字的方式倒序排列出来

清楚了吧,呵呵

Comments (3)

vmstat命令列出的属性详解

vmstat各项:
procs:
r–>在运行队列中等待的进程数
b–>在等待io的进程数
w–>可以进入运行队列但被替换的进程
memoy
swap–>现时可用的交换内存(k表示)
free–>空闲的内存(k表示)
pages
re--》回收的页面
mf--》非严重错误的页面
pi--》进入页面数(k表示)
po--》出页面数(k表示)
fr--》空余的页面数(k表示)
de--》提前读入的页面中的未命中数
sr--》通过时钟算法扫描的页面
disk 显示每秒的磁盘操作。 s表示scsi盘,0表示盘号
fault 显示每秒的中断数
in--》设备中断
sy--》系统中断
cy--》cpu交换
cpu 表示cpu的使用状态
cs--》用户进程使用的时间
sy--》系统进程使用的时间
id--》cpu空闲的时间
如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
如果pi,po 长期不等于0,表示内存不足。
如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

Leave a Comment

Linux不是Windows (zt)

“嗨!我用了几天Linux,总体还行。但某某功能不能像Windows那样,真糟糕。为什么开发人员不能重写一下让它更像Windows一点?我相信这样做的话Linux的用户会更多!

你也许尝试过回应这些问题,结果那个Linux新手却和你吵得面红耳赤,他根据自己几年来在另外一个操作系统上和区区几小时在Linux上的经验,得出结
论:他的想法是无比睿智的,而你不同意他的观点是因为你是一个从“古董学校”出来的Linux用户,认为GUI是恶魔的产物,所有人都应该强迫去用CLI
(译者:命令行界面)。

=====================

我一直用linux,经常有人问我linux可不可以这个,可不可以那个,或者是“如果linux可以这个,我就用linux了”,事实上,所有我用电脑需要的功能,linux都能提供,而且还有学习的过程,当你通过自己的努力掌握了一个以前没有掌握的东西,很有快感的

如果再有人问我类似问题,我就让他看这篇文章

Leave a Comment