免费注册 查看新帖 |

Chinaunix

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

新手在线等:请教 打开管道 读取200M 文件 出现 out of memory [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-09 14:56 |只看该作者 |倒序浏览
本帖最后由 hu_zhuang163 于 2013-08-09 14:58 编辑

  1. #==========================
  2. #函数名:getTanxImprLogResultByDate
  3. #功 能:计算指定日期所有的  Tanx  的 Impr 数据
  4. #参 数:  $obtaintime:需要计算的日期,格式为yyyymmdd
  5. #返回值:
  6. sub getTanxImprLogResultByDate {
  7.         my ($date,$logFile) = @_;
  8.         #找出 时间段内的zip 文件
  9.         say( "---------------------------------impr操作  start-------");
  10.         my @zipFiles = glob $logFile . "log_".$date.".tar.gz" or die "can't find/read tar.gz $logFile ";
  11.         foreach (@zipFiles) {
  12.                 my $fileList   = $_;
  13.                 my $startIndex = rindex( $fileList, "log_" );
  14.                 my $zipDate    = substr $fileList, $startIndex + 4, 8;

  15.                 if ( $zipDate =$date) {
  16.                                 say( "---impr操作   找到日期".$date."-------");
  17.                                 my $next = Archive::Tar->iter($fileList, 1, {filter => qr(^impr*)} );
  18.                                          while( my $f = $next->() ) {
  19.                                                   my $logName=$f->name;
  20.                                                    say $logName;
  21.                                                  if($logName =~ m/impr_*/){
  22.                                                           $f->extract or warn "Extraction failed";
  23.                                                
  24.                                                         open( DATA, "<", $logName )  || die "cannot open the file: $!\n";
  25.                                                         while ( my $line = <DATA> ) {
  26.                                                                 my @lineAry = split /,/, $line;
  27.                                                                 my $unId=$lineAry[0];
  28.                                                        
  29.                                                                         if (exists($todayClickHash{$unId} ) ) {
  30.                                                                                 $todayClickHash{$unId} = "1,".$todayClickHash{$unId};
  31.                                                                         }
  32.        
  33.                                                         }
  34.                                                         close(DATA);
  35.                                                         unlink $logName;
  36.                                                  }
  37.                                         
  38.                                  }
  39.                 }
  40.         }
  41.         say( "---impr操作   end-------");
  42. }
复制代码
现在错误信息是 对 某一个2G文件内的 小时日志  impr_2013060320.log  大小250M
出现  Out of memory!



菜鸟请教
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP