免费注册 查看新帖 |

Chinaunix

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

perl读大文件,显示内存不够,怎么办 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-15 10:28 |只看该作者 |倒序浏览
我在读apache日志的时候,提示
out of memory during request for 16456 bytes, total sbrk() is 536004608 bytes!

怎么解决呢?日志是400M多,内存是2G
Mem: 627M Active, 567M Inact, 299M Wired, 54M Cache, 112M Buf, 456M Free

论坛徽章:
0
2 [报告]
发表于 2007-03-15 10:48 |只看该作者
把其他进程关掉,不然把日志拷贝到其他机器分析,或者使用其他机器的服务如数据库等。

论坛徽章:
0
3 [报告]
发表于 2007-03-15 11:56 |只看该作者
不要一下子my @log=<LOG_FD>

论坛徽章:
0
4 [报告]
发表于 2007-03-15 12:09 |只看该作者
首先弄明白要干什么,如果是一行一行分析的,可以一行一行的读啊

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2007-03-15 12:20 |只看该作者
这个绝对需要分布读取的。

如果需要处理的步骤多,那么就用文件缓存中间过程。

论坛徽章:
0
6 [报告]
发表于 2007-03-15 21:34 |只看该作者
看电影时就在想象时间平移是否能用Perl实现,sysseek和seek可以用作文件指针,从文件开始偏移量0开始。
    my $fh = gensym();
    my $buffer;
    sysopen $fh, $file, O_RDONLY
        or die "can't open file $file failed: $!";
    flock $fh, LOCK_EX;
    sysseek $fh, -$seek_bytes, 2   # 指针移动。
        if defined $seek_bytes;
    sysread $fh,$buffer,$read_bytes
        if defined $read_bytes;
    flock $fh, LOCK_UN;
    close $fh;
    return $buffer;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP