我使用以下perl代码从SEC网站大量下载10-K。但是,我得到了“内存不足!”当脚本显然卡在处理特别大的10-K文件时,每隔几百个文件就会发出消息。任何想法我怎么能避免这种“内存不足!”大文件的错误?
function RegexValidation() {
if [ "$2" = "fqdn" ]; then
if ! echo "$1" | grep -q -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-z0-9_\-]{1,63}\.?)+(?:[a-z]{2,})$)'; then
echo "ERROR - $1 is not a valid FQDN"
return 1
fi
return 0
fi
}
while :; do
read -e -r -p "Enter the Fully Qualified Domain Name > " fqdn
if RegexValidation "$fqdn" fqdn
then break
fi
done
答案 0 :(得分:1)
我最近遇到了使用线程和数千个LWP请求的类似问题。从来没有弄清楚内存泄漏是什么,但切换到HTTP :: Tiny解决了它。
从LWP到HTTP::Tiny很简单:
use HTTP::Tiny;
my $ua = HTTP::Tiny->new;
my $response =$ua->get($get_file);
if ($response->{success}) {
print OUT $response->{content};
...当然HTTP::Tiny
可以为您执行保存部分,例如LWP
。
你也可以尝试在循环中创建一个新的LWP
对象,希望垃圾收集能够启动,但它对我来说也不起作用。 LWP
怪物内部有东西泄漏。
编辑:尝试将2gb文件下载到字符串中时可能会出现问题,mirror方法应该为您解决此问题。