免费注册 查看新帖 |

Chinaunix

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

perl out of memory [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-14 12:59 |只看该作者 |倒序浏览
脚本需要读取几个较大的文件,有1000多万行,100多兆。

把这个文件加载到内存时出错。out of memory。

但是事实上这台机子内存有120G,

机子是 HP-UX 。 perl -v 5.8.8 不知道是不是perl 对内存有限制,还是系统对分配的内存有限制?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2009-07-14 13:12 |只看该作者
120G 是整个系统的内存。
在 Linux 上,单个进程的最大内存限制是 3G。

试着优化一下你的程序吧。
解决同一个问题有很多种方式,但通常都没必要挑战这个极限。

论坛徽章:
0
3 [报告]
发表于 2009-07-14 13:13 |只看该作者

回复 #1 qfmeal 的帖子

你是怎么读的?把代码贴出来啊。
120G内存,难道是HP的superdome

[ 本帖最后由 Perl_Er 于 2009-7-14 13:15 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-07-14 13:53 |只看该作者
100多兆不算大 如果out of memory了 那你的程序肯定有别的问题.

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2009-07-14 14:15 |只看该作者
原帖由 flw 于 2009-7-14 13:12 发表
120G 是整个系统的内存。
在 Linux 上,单个进程的最大内存限制是 3G。

楼主用的应该不是 Linux.

论坛徽章:
0
6 [报告]
发表于 2009-07-14 14:30 |只看该作者
机子是惠普unix,64位机
perl版本是5.8.8
120G内存,20、30个CPU

之所以把那么大的文件读进内存,是因为,脚本里面要不断的在那个文件里面搜索数据.
我的代码其中读取文件的部分(我的代码比较烂...):


# 加载account数据

my $hash_account            = &get_account_hash();


sub get_account_hash
{
    my $file = "$ENV{OUT}/ocs_account.tmp";
    open FH,$file or die "open $file error!";
    my %hash;
&nbsp;&nbsp;&nbsp;&nbsp;while(<FH>)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chomp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my ($acc_id,$cust_id,@left) = split /\|/;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$hash{$cust_id} = [$acc_id,$cust_id,@left];
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;close FH;
&nbsp;&nbsp;&nbsp;&nbsp;return \%hash;&nbsp;&nbsp;&nbsp;&nbsp;
}

论坛徽章:
0
7 [报告]
发表于 2009-07-15 10:29 |只看该作者
>>> 1000多万行,100多兆
你一行才10几个字节?定长?

论坛徽章:
0
8 [报告]
发表于 2009-07-15 10:32 |只看该作者

回复 #6 qfmeal 的帖子

請問這樣和把整個檔案讀到記憶體有什麼分別?

论坛徽章:
0
9 [报告]
发表于 2009-07-15 10:46 |只看该作者

回复 #6 qfmeal 的帖子

得到这些数据后,你想要做的是什么了?

论坛徽章:
0
10 [报告]
发表于 2009-07-15 11:46 |只看该作者
只有100多M的文件应该不会out of memory啊. 除非你的server上还有别的啥东西在抢占资源。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP