Chinaunix

标题: PERL文件监控导至CPU很高 [打印本页]

作者: xuebao_zx    时间: 2011-06-24 10:01
标题: PERL文件监控导至CPU很高
代码如下:

open (tlog,"<c:\\tlog1.log") or die $!;
while(1){
  my $in = <tlog>;
  print $in;
}

winodws XP 操作系统 .CPU:1.83GHz
只有一运行以上代码,CPU就马上增长到50%以上,
我是双核CPU,基本上可以看到其中一核已全部占完。


请问,有没有更好的方法啊,这CPU也太高了
作者: xuebao_zx    时间: 2011-06-24 10:18
OK.问题已解决,参考了别人的脚本。

在while循环的最后加sleep 1;
OK..  运行时CPU很低。
作者: 兰花仙子    时间: 2011-06-24 10:23
  1. open (tlog,"<c:\\tlog1.log") or die $!;
  2. while(1){
  3.   my $in = <tlog>;
  4.   print $in;
  5. }
复制代码


你这个可谓经典代码了,它首先是个crazy loop,CPU不涨才怪。。
为什么不正儿八经写呢?

  1. open my $tlog,"<","xxx.file" or die $!;
  2. while(<$tlog>) {
  3.     print;
  4. }
  5. close $tlog;
复制代码

作者: newstudent2011    时间: 2011-06-24 10:25
大日志文件读的太快了CPU内存吃不消

Perl 还有个很好的函数seek你可以试试,一次读指定字节
作者: mysqllog    时间: 2011-06-24 10:32
所谓的文件监控就是打印出来么?
作者: mysqllog    时间: 2011-06-24 10:34
回复 4# newstudent2011


   
    靠,注册时间够新的...
作者: xuebao_zx    时间: 2011-06-24 16:18
俺是菜鸟,各位前辈请多多指教。

以上代码只是一个测试,


open (tlog,"<c:\\tlog1.log") or die $!;
seek(tlog,0,2);
while(1){
  my $in = <tlog>;
  if( $in XXXX){ XXXXXXXX};
  sleep 1;    #  加上CPU下来了,只有3%左右
}
作者: flw    时间: 2011-06-24 18:18
太牛了啊!!!佩服佩服!
作者: ulmer    时间: 2011-06-24 19:38
That is classic and very old method for tail -f in perl!!!
my $file = 'test.log';
open (LOG, $file) or die $!;
for (;;) {
    print <LOG>;
    sleep 1;
    seek (LOG, 0, 1);
}


See perldoc perlfaq5, man pause
作者: newstudent2011    时间: 2011-06-25 12:26
本帖最后由 newstudent2011 于 2011-06-25 12:37 编辑

这么大大文件不知你打印有什么意义?

如果你是想日志超过字节分段转储,读大文件尽量不要用while,可以试试改变$/

  1. undef $/;
  2. open FILE, "123.log";
  3.    $content = <FILE>;
  4.    close FILE;
  5. $/="\n";
  6. open (FILE,">bak.log");
  7. print FILE  $content;
  8. close FILE;

复制代码
# 测试结果,100兆大文件瞬间处理完毕,CPU 来不及高就结束了
作者: 兰花仙子    时间: 2011-06-25 14:35
测试结果,100兆大文件瞬间处理完毕,CPU 来不及高就结束了

   
牛人...100G呢?
作者: yangzh1985    时间: 2011-06-25 21:47
回复 11# 兰花仙子


    貌似遇到过这个问题,当时处理大于8G的文件,读着读着就死掉了...
作者: robinho_nju    时间: 2011-06-28 09:36
真TMD的神来之笔啊
作者: wttaurus    时间: 2011-06-29 16:26
还是新手学习中!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2