我偶尔需要从大型XML数据库导出中提取数据。文件大小介于600到700 MB之间。经过几天的研究,我得出结论XML::Twig
是要走的路,因为它的处理程序允许我逐块处理文件。
我按照这些示例,经过几个小时的试验和错误,我编写了执行我需要做的工作的Perl代码。代码工作,它提取了我想要的数据并计算了我需要的细节。但是在运行脚本时(花了大约15分钟来处理620MB的XML)我在Activity Monitor中注意到,到最后,内存使用量会迅速增加到不合理的高水平。
我删除了处理我感兴趣的XML标记的Perl代码,并用一条指令替换它来增加变量,只计算找到了product
个元素的数量。内存使用情况类似。第一次正常,然后朝最后的几个元素开始迅速增加并吃掉我拥有的一切。
我添加了一些代码来监控时间,处理的项目数以及Perl进程使用的内存量。此代码显示在此处:
#!/usr/bin/perl
use strict;
use utf8;
use XML::Twig;
binmode STDOUT, ":encoding(UTF-8)";
binmode STDERR, ":encoding(UTF-8)";
my $my_processID = $$;
my ($xml_file_name, $second_arg) = @ARGV;
unless (defined($xml_file_name)) { die "Please provide XML filename as 1st argument."; }
my $product_counter = 0;
my @shell_command_output_text;
my $resource_usage_status;
my $reference_timestamp;
my $datetimeNow;
my $t = XML::Twig->new(
twig_handlers => { 'product' => \&do_what_needs_to_be_done_with_each_product },
pretty_print => 'indented'
);
$reference_timestamp = time();
$t->parsefile( $xml_file_name, ErrorContext => 2 );
print "(Parse finished)\n";
showstatus();
$t->purge;
print "(Purge finished)\n";
showstatus();
print "\nJOB COMPLETE.\n$product_counter items processed.\n";
exit 0;
sub do_what_needs_to_be_done_with_each_product() {
my( $twig, $product)= @_;
$product_counter++;
## Display status every 5 seconds:
if ( ( time()-$reference_timestamp ) > 5 ) {
showstatus();
$reference_timestamp = time();
}
$twig->purge;
} ## end-sub
sub showstatus() {
@shell_command_output_text = `top -l 1 -pid $my_processID -stats pid,command,cpu,mem`;
## I only need the last line of that output.
$resource_usage_status = $shell_command_output_text[$#shell_command_output_text];
$datetimeNow = localtime();
chomp $resource_usage_status;
print "Res: $resource_usage_status -> item count: $product_counter <- time: $datetimeNow\n";
} ## end-sub
以下是我运行上述脚本时屏幕上显示的内容。
keve@deimos:DATA$ ./twigExample.pl product_db_extract.xml
Res: 3237 perl5.18 0.0 12M+ -> item count: 3086 <- time: Sat Nov 18 23:45:48 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 6521 <- time: Sat Nov 18 23:45:55 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 9909 <- time: Sat Nov 18 23:46:02 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 12751 <- time: Sat Nov 18 23:46:09 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 15570 <- time: Sat Nov 18 23:46:16 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 18151 <- time: Sat Nov 18 23:46:23 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 20828 <- time: Sat Nov 18 23:46:30 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 23561 <- time: Sat Nov 18 23:46:37 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 26230 <- time: Sat Nov 18 23:46:44 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 28861 <- time: Sat Nov 18 23:46:51 2017
Res: 3237 perl5.18 0.0 12M+ -> item count: 31665 <- time: Sat Nov 18 23:46:58 2017
Res: 3237 perl5.18 0.0 13M+ -> item count: 34443 <- time: Sat Nov 18 23:47:05 2017
Res: 3237 perl5.18 0.0 13M+ -> item count: 36952 <- time: Sat Nov 18 23:47:12 2017
Res: 3237 perl5.18 0.0 13M+ -> item count: 39461 <- time: Sat Nov 18 23:47:19 2017
Res: 3237 perl5.18 0.0 13M+ -> item count: 42113 <- time: Sat Nov 18 23:47:26 2017
Res: 3237 perl5.18 0.0 13M+ -> item count: 44794 <- time: Sat Nov 18 23:47:33 2017
Res: 3237 perl5.18 0.0 13M+ -> item count: 47510 <- time: Sat Nov 18 23:47:40 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 50154 <- time: Sat Nov 18 23:47:47 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 52869 <- time: Sat Nov 18 23:47:54 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 55497 <- time: Sat Nov 18 23:48:01 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 57725 <- time: Sat Nov 18 23:48:08 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 59754 <- time: Sat Nov 18 23:48:15 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 61600 <- time: Sat Nov 18 23:48:22 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 63244 <- time: Sat Nov 18 23:48:29 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 64801 <- time: Sat Nov 18 23:48:36 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 66448 <- time: Sat Nov 18 23:48:43 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 68022 <- time: Sat Nov 18 23:48:50 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 69561 <- time: Sat Nov 18 23:48:57 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 71180 <- time: Sat Nov 18 23:49:04 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 73009 <- time: Sat Nov 18 23:49:11 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 75259 <- time: Sat Nov 18 23:49:18 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 77331 <- time: Sat Nov 18 23:49:25 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 79344 <- time: Sat Nov 18 23:49:32 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 81389 <- time: Sat Nov 18 23:49:39 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 83345 <- time: Sat Nov 18 23:49:46 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 85346 <- time: Sat Nov 18 23:49:53 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 87350 <- time: Sat Nov 18 23:50:00 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 89359 <- time: Sat Nov 18 23:50:07 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 91374 <- time: Sat Nov 18 23:50:14 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 93451 <- time: Sat Nov 18 23:50:21 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 95542 <- time: Sat Nov 18 23:50:28 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 97635 <- time: Sat Nov 18 23:50:35 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 99764 <- time: Sat Nov 18 23:50:42 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 101914 <- time: Sat Nov 18 23:50:49 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 103896 <- time: Sat Nov 18 23:50:56 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 105982 <- time: Sat Nov 18 23:51:03 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 108023 <- time: Sat Nov 18 23:51:10 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 110090 <- time: Sat Nov 18 23:51:17 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 112033 <- time: Sat Nov 18 23:51:24 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 114039 <- time: Sat Nov 18 23:51:31 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 116038 <- time: Sat Nov 18 23:51:38 2017
Res: 3237 perl5.18 0.0 15M+ -> item count: 118031 <- time: Sat Nov 18 23:51:45 2017
(Parse finished)
Res: 3237 perl5.18 0.0 3780M+ -> item count: 119335 <- time: Sat Nov 18 23:54:21 2017
(Purge finished)
Res: 3237 perl5.18 0.0 2634M+ -> item count: 119335 <- time: Sat Nov 18 23:54:27 2017
JOB COMPLETE.
119335 items processed.
keve@deimos:DATA$
注意3分钟的差距,&#34; Parse完成&#34;打印出来。
我希望看到最后几个产品标签的内存使用量增加,就像我在Activity Monitor中看到的那样。但打印到最后一个产品标签的内存使用量是完全可以接受的15 MB。这个输出中没有显示棘手的部分:只有缺少的3分钟时间和3780M表示在最终产品标签之后发生了奇怪的事情。
所以我编写了一个shell脚本,以便在最后的3分钟内跟踪内存使用情况。以下是我在单独的窗口中运行的内容,而perl脚本正在自己的窗口中处理XML。
#!/bin/bash
while true
do
perlStat=`top -l 1 -pid $1 -stats pid,command,cpu,mem,purg,vsize | grep perl5`
echo "`date` ::> $perlStat"
sleep 5
done
以下是perl脚本处理XML时运行的shell脚本的输出:
keve@deimos:DATA$ ./monitorTWIGprocess.sh 3237
2017 Nov 18 Szo 23:45:53 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:00 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:06 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:12 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:18 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:24 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:30 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:36 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:42 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:48 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:46:54 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:47:01 CET ::> 3237 perl5.18 0.0 12M+ 0B N/A
2017 Nov 18 Szo 23:47:07 CET ::> 3237 perl5.18 0.0 13M+ 0B N/A
2017 Nov 18 Szo 23:47:13 CET ::> 3237 perl5.18 0.0 13M+ 0B N/A
2017 Nov 18 Szo 23:47:19 CET ::> 3237 perl5.18 0.0 13M+ 0B N/A
2017 Nov 18 Szo 23:47:25 CET ::> 3237 perl5.18 0.0 13M+ 0B N/A
2017 Nov 18 Szo 23:47:31 CET ::> 3237 perl5.18 0.0 13M+ 0B N/A
2017 Nov 18 Szo 23:47:37 CET ::> 3237 perl5.18 0.0 13M+ 0B N/A
2017 Nov 18 Szo 23:47:43 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:47:49 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:47:56 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:02 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:08 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:14 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:20 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:26 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:32 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:38 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:44 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:51 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:48:57 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:03 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:09 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:15 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:21 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:27 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:33 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:39 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:46 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:52 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:49:58 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:04 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:10 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:16 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:22 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:28 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:35 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:41 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:47 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:53 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:50:59 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:05 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:11 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:17 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:23 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:29 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:36 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:42 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:48 CET ::> 3237 perl5.18 0.0 15M+ 0B N/A
2017 Nov 18 Szo 23:51:54 CET ::> 3237 perl5.18 0.0 125M+ 0B N/A
2017 Nov 18 Szo 23:52:00 CET ::> 3237 perl5.18 0.0 278M+ 0B N/A
2017 Nov 18 Szo 23:52:06 CET ::> 3237 perl5.18 0.0 430M+ 0B N/A
2017 Nov 18 Szo 23:52:12 CET ::> 3237 perl5.18 0.0 584M+ 0B N/A
2017 Nov 18 Szo 23:52:18 CET ::> 3237 perl5.18 0.0 737M+ 0B N/A
2017 Nov 18 Szo 23:52:24 CET ::> 3237 perl5.18 0.0 889M+ 0B N/A
2017 Nov 18 Szo 23:52:31 CET ::> 3237 perl5.18 0.0 1042M+ 0B N/A
2017 Nov 18 Szo 23:52:37 CET ::> 3237 perl5.18 0.0 1195M+ 0B N/A
2017 Nov 18 Szo 23:52:43 CET ::> 3237 perl5.18 0.0 1349M+ 0B N/A
2017 Nov 18 Szo 23:52:49 CET ::> 3237 perl5.18 0.0 1502M+ 0B N/A
2017 Nov 18 Szo 23:52:55 CET ::> 3237 perl5.18 0.0 1656M+ 0B N/A
2017 Nov 18 Szo 23:53:01 CET ::> 3237 perl5.18 0.0 1809M+ 0B N/A
2017 Nov 18 Szo 23:53:07 CET ::> 3237 perl5.18 0.0 1961M+ 0B N/A
2017 Nov 18 Szo 23:53:13 CET ::> 3237 perl5.18 0.0 2114M+ 0B N/A
2017 Nov 18 Szo 23:53:19 CET ::> 3237 perl5.18 0.0 2267M+ 0B N/A
2017 Nov 18 Szo 23:53:26 CET ::> 3237 perl5.18 0.0 2420M+ 0B N/A
2017 Nov 18 Szo 23:53:32 CET ::> 3237 perl5.18 0.0 2573M+ 0B N/A
2017 Nov 18 Szo 23:53:38 CET ::> 3237 perl5.18 0.0 2726M+ 0B N/A
2017 Nov 18 Szo 23:53:44 CET ::> 3237 perl5.18 0.0 2879M+ 0B N/A
2017 Nov 18 Szo 23:53:50 CET ::> 3237 perl5.18 0.0 3032M+ 0B N/A
2017 Nov 18 Szo 23:53:56 CET ::> 3237 perl5.18 0.0 3186M+ 0B N/A
2017 Nov 18 Szo 23:54:02 CET ::> 3237 perl5.18 0.0 3339M+ 0B N/A
2017 Nov 18 Szo 23:54:08 CET ::> 3237 perl5.18 0.0 3492M+ 0B N/A
2017 Nov 18 Szo 23:54:15 CET ::> 3237 perl5.18 0.0 3646M+ 0B N/A
2017 Nov 18 Szo 23:54:21 CET ::> 3237 perl5.18 0.0 3786M+ 0B N/A
2017 Nov 18 Szo 23:54:27 CET ::> 3237 perl5.18 0.0 3502M+ 0B N/A
2017 Nov 18 Szo 23:54:33 CET ::>
^C
keve@deimos:DATA$
请注意23:51:54内存使用量的增加。那是另一个输出中的3分钟差距开始的时候。内存使用量正在迅速增加。
在处理最后一个(119,335th)产品标签结束时,导致内存使用量快速增加的原因令我感到困惑。不管它是什么,为什么它会使用如此多的内存? 3.5G而不是15M,那不行。
我做错了吗?
有关如何避免内存使用量增加的任何建议吗?
稍后添加,以回复我收到的原始帖子的答案。
补编
切换到twig_roots。
我通过注释掉处理程序定义并添加其twig_roots变体修改了twig处理程序块,如下所示:
my $t = XML::Twig->new(
##twig_handlers => { 'product' => \&do_what_needs_to_be_done_with_each_product },
twig_roots => { 'product' => \&do_what_needs_to_be_done_with_each_product },
twig_print_outside_roots => 0,
pretty_print => 'indented'
);
我将$twig->purge();
指令留在了我的子目录中。
以下是perl脚本的输出:
keve@deimos:DATA$ ./twigExample.pl product_db_extract.xml
Res: 1591 perl5.18 0.0 12M+ -> item count: 2852 <- time: Sun Nov 19 15:20:51 2017
Res: 1591 perl5.18 0.0 12M+ -> item count: 6106 <- time: Sun Nov 19 15:20:58 2017
Res: 1591 perl5.18 0.0 12M+ -> item count: 9341 <- time: Sun Nov 19 15:21:05 2017
Res: 1591 perl5.18 0.0 12M+ -> item count: 12141 <- time: Sun Nov 19 15:21:12 2017
.
.
.
Res: 1591 perl5.18 0.0 15M+ -> item count: 112293 <- time: Sun Nov 19 15:26:41 2017
Res: 1591 perl5.18 0.0 15M+ -> item count: 114255 <- time: Sun Nov 19 15:26:48 2017
Res: 1591 perl5.18 0.0 15M+ -> item count: 116171 <- time: Sun Nov 19 15:26:55 2017
Res: 1591 perl5.18 0.0 15M+ -> item count: 118099 <- time: Sun Nov 19 15:27:02 2017
(Parse finished)
Res: 1591 perl5.18 0.0 15M+ -> item count: 119335 <- time: Sun Nov 19 15:27:56 2017
(Purge finished)
Res: 1591 perl5.18 0.0 15M+ -> item count: 119335 <- time: Sun Nov 19 15:27:57 2017
JOB COMPLETE.
119335 items processed.
keve@deimos:DATA$
以下是监控shell脚本的输出:
keve@deimos:DATA$ ./monitorTWIGprocess.sh 1591
2017 Nov 19 Vas 15:20:57 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:03 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:09 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:16 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:22 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:28 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:34 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:40 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:46 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:52 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:21:58 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:22:04 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:22:10 CET ::> 1591 perl5.18 0.0 12M+ 0B N/A
2017 Nov 19 Vas 15:22:16 CET ::> 1591 perl5.18 0.0 13M+ 0B N/A
2017 Nov 19 Vas 15:22:22 CET ::> 1591 perl5.18 0.0 13M+ 0B N/A
2017 Nov 19 Vas 15:22:28 CET ::> 1591 perl5.18 0.0 13M+ 0B N/A
2017 Nov 19 Vas 15:22:35 CET ::> 1591 perl5.18 0.0 13M+ 0B N/A
2017 Nov 19 Vas 15:22:41 CET ::> 1591 perl5.18 0.0 13M+ 0B N/A
2017 Nov 19 Vas 15:22:47 CET ::> 1591 perl5.18 0.0 13M+ 0B N/A
2017 Nov 19 Vas 15:22:53 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:22:59 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:05 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:11 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:17 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:23 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:29 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:35 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:41 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:47 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:23:54 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:00 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:06 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:12 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:18 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:24 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:30 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:36 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:42 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:48 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:24:54 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:00 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:06 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:13 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:19 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:25 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:31 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:37 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:43 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:49 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:25:55 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:01 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:07 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:13 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:19 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:26 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:32 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:38 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:44 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:50 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:26:56 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:02 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:08 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:14 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:20 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:26 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:32 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:38 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:44 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:51 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:27:57 CET ::> 1591 perl5.18 0.0 15M+ 0B N/A
2017 Nov 19 Vas 15:28:03 CET ::>
^C
keve@deimos:DATA$
好消息是使用twig_roots方法而不是twig处理程序使我的perl代码表现得像我想要的那样。它通过一个巨大的XML文件结束从每个产品中提取数据(提取的数据不是XML格式),而使用的内存量保持在20兆字节以下。锦绣!
坏消息是我仍然无法解释为什么使用处理程序会占用那么多内存,以及为什么在最后一个产品被读取之后就这样做了。直到最后一个产品,内存使用情况非常好。是什么让它在那时失控?我将进行一些测试以尝试满足我的好奇心,但这不再与我的XML处理perl代码开发如何向前发展的问题联系在一起。我将twig_roots建议标记为一个公认的答案,但我非常感谢另一个答案,因为那个人的教育是公平的。
答案 0 :(得分:4)
您正在构建一个完整的XML数据结构,但product
元素除外,只是为了将其全部丢弃
您不会说出您实际想要对数据做什么,但如果您提供twig_handlers
,则XML::Twig
期望生成输入数据的过滤/修改版本
如果您根本不想要任何输出XML,或者您想构建自己的输出而不是修改输入,那么我建议您改用twig_roots
,就像这样
这是未经测试的代码。我目前正在旅行,无法在PC系统附近进行测试
my $t = XML::Twig->new(
twig_roots => { product => \&do_what_needs_to_be_done_with_each_product },
twig_print_outside_roots => 0,
pretty_print => 'indented',
);
请注意,do_what_needs_to_be_done_with_each_product
(我希望这不是真正的标识符)在这样工作时不应包含$t->purge
答案 1 :(得分:2)
在最终清除过程中,内存使用量会显着增加,即解析结束后的内存使用量。
不吹扫时会发生什么?
以下是移除/注释掉$twig->purge();
行时发生的情况
处理XML的perl脚本的输出:
keve@deimos:DATA$ ./twigExample.pl product_db_extract.xml
Res: 496 perl5.18 0.0 144M+ -> item count: 2905 <- time: Sun Nov 19 13:23:04 2017
Res: 496 perl5.18 0.0 291M+ -> item count: 6341 <- time: Sun Nov 19 13:23:11 2017
Res: 496 perl5.18 0.0 439M+ -> item count: 9777 <- time: Sun Nov 19 13:23:18 2017
Res: 496 perl5.18 0.0 587M+ -> item count: 12641 <- time: Sun Nov 19 13:23:25 2017
Res: 496 perl5.18 0.0 735M+ -> item count: 15528 <- time: Sun Nov 19 13:23:32 2017
Res: 496 perl5.18 0.0 883M+ -> item count: 18137 <- time: Sun Nov 19 13:23:39 2017
Res: 496 perl5.18 0.0 1032M+ -> item count: 20852 <- time: Sun Nov 19 13:23:46 2017
Res: 496 perl5.18 0.0 1179M+ -> item count: 23596 <- time: Sun Nov 19 13:23:53 2017
Res: 496 perl5.18 0.0 1328M+ -> item count: 26297 <- time: Sun Nov 19 13:24:00 2017
Res: 496 perl5.18 0.0 1476M+ -> item count: 28929 <- time: Sun Nov 19 13:24:07 2017
Res: 496 perl5.18 0.0 1624M+ -> item count: 31752 <- time: Sun Nov 19 13:24:14 2017
Res: 496 perl5.18 0.0 1772M+ -> item count: 34536 <- time: Sun Nov 19 13:24:21 2017
Res: 496 perl5.18 0.0 1920M+ -> item count: 37019 <- time: Sun Nov 19 13:24:28 2017
Res: 496 perl5.18 0.0 2068M+ -> item count: 39566 <- time: Sun Nov 19 13:24:35 2017
Res: 496 perl5.18 0.0 2216M+ -> item count: 42246 <- time: Sun Nov 19 13:24:42 2017
Res: 496 perl5.18 0.0 2365M+ -> item count: 44976 <- time: Sun Nov 19 13:24:49 2017
Res: 496 perl5.18 0.0 2513M+ -> item count: 47722 <- time: Sun Nov 19 13:24:56 2017
Res: 496 perl5.18 0.0 2662M+ -> item count: 50389 <- time: Sun Nov 19 13:25:03 2017
Res: 496 perl5.18 0.0 2810M+ -> item count: 53083 <- time: Sun Nov 19 13:25:10 2017
Res: 496 perl5.18 0.0 2958M+ -> item count: 55745 <- time: Sun Nov 19 13:25:17 2017
Res: 496 perl5.18 0.0 3106M+ -> item count: 57955 <- time: Sun Nov 19 13:25:24 2017
Res: 496 perl5.18 0.0 3253M+ -> item count: 59924 <- time: Sun Nov 19 13:25:31 2017
Res: 496 perl5.18 0.0 3402M+ -> item count: 61742 <- time: Sun Nov 19 13:25:38 2017
Res: 496 perl5.18 0.0 3550M+ -> item count: 63373 <- time: Sun Nov 19 13:25:45 2017
Res: 496 perl5.18 0.0 3698M+ -> item count: 64954 <- time: Sun Nov 19 13:25:52 2017
Res: 496 perl5.18 0.0 3845M+ -> item count: 66589 <- time: Sun Nov 19 13:25:59 2017
Res: 496 perl5.18 0.0 3993M+ -> item count: 68165 <- time: Sun Nov 19 13:26:06 2017
Res: 496 perl5.18 0.0 4141M+ -> item count: 69717 <- time: Sun Nov 19 13:26:13 2017
Res: 496 perl5.18 0.0 4289M+ -> item count: 71320 <- time: Sun Nov 19 13:26:20 2017
Res: 496 perl5.18 0.0 4380M+ -> item count: 73202 <- time: Sun Nov 19 13:26:27 2017
Res: 496 perl5.18 0.0 4384M+ -> item count: 75413 <- time: Sun Nov 19 13:26:34 2017
Res: 496 perl5.18 0.0 4280M+ -> item count: 77457 <- time: Sun Nov 19 13:26:41 2017
Res: 496 perl5.18 0.0 4181M+ -> item count: 79444 <- time: Sun Nov 19 13:26:48 2017
Res: 496 perl5.18 0.0 4094M+ -> item count: 81443 <- time: Sun Nov 19 13:26:55 2017
Res: 496 perl5.18 0.0 3939M+ -> item count: 83351 <- time: Sun Nov 19 13:27:02 2017
Res: 496 perl5.18 0.0 3839M+ -> item count: 85322 <- time: Sun Nov 19 13:27:09 2017
Res: 496 perl5.18 0.0 3727M+ -> item count: 87307 <- time: Sun Nov 19 13:27:16 2017
Res: 496 perl5.18 0.0 3629M+ -> item count: 89305 <- time: Sun Nov 19 13:27:23 2017
Res: 496 perl5.18 0.0 3521M+ -> item count: 91275 <- time: Sun Nov 19 13:27:30 2017
Res: 496 perl5.18 0.0 3418M+ -> item count: 93298 <- time: Sun Nov 19 13:27:37 2017
Res: 496 perl5.18 0.0 3299M+ -> item count: 95339 <- time: Sun Nov 19 13:27:44 2017
Res: 496 perl5.18 0.0 3189M+ -> item count: 97398 <- time: Sun Nov 19 13:27:51 2017
Res: 496 perl5.18 0.0 3141M+ -> item count: 99449 <- time: Sun Nov 19 13:27:58 2017
Res: 496 perl5.18 0.0 2977M+ -> item count: 101543 <- time: Sun Nov 19 13:28:05 2017
Res: 496 perl5.18 0.0 2857M+ -> item count: 103519 <- time: Sun Nov 19 13:28:12 2017
Res: 496 perl5.18 0.0 2748M+ -> item count: 105574 <- time: Sun Nov 19 13:28:19 2017
Res: 496 perl5.18 0.0 2643M+ -> item count: 107550 <- time: Sun Nov 19 13:28:26 2017
Res: 496 perl5.18 0.0 2591M+ -> item count: 109574 <- time: Sun Nov 19 13:28:33 2017
Res: 496 perl5.18 0.0 2506M+ -> item count: 111562 <- time: Sun Nov 19 13:28:40 2017
Res: 496 perl5.18 0.0 2389M+ -> item count: 113485 <- time: Sun Nov 19 13:28:47 2017
Res: 496 perl5.18 0.0 2280M+ -> item count: 115455 <- time: Sun Nov 19 13:28:54 2017
Res: 496 perl5.18 0.0 2100M+ -> item count: 117391 <- time: Sun Nov 19 13:29:01 2017
(Parse finished)
Res: 496 perl5.18 0.0 893M+ -> item count: 119335 <- time: Sun Nov 19 13:31:41 2017
(Purge finished)
Res: 496 perl5.18 0.0 5144M+ -> item count: 119335 <- time: Sun Nov 19 13:32:27 2017
JOB COMPLETE.
119335 items processed.
keve@deimos:DATA$
监视perl脚本的内存使用情况的shell脚本的输出:
keve@deimos:DATA$ ./monitorTWIGprocess.sh 496
2017 Nov 19 Vas 13:23:11 CET ::> 496 perl5.18 0.0 291M+ 0B N/A
2017 Nov 19 Vas 13:23:17 CET ::> 496 perl5.18 0.0 434M+ 0B N/A
2017 Nov 19 Vas 13:23:23 CET ::> 496 perl5.18 0.0 559M+ 0B N/A
2017 Nov 19 Vas 13:23:30 CET ::> 496 perl5.18 0.0 684M+ 0B N/A
2017 Nov 19 Vas 13:23:36 CET ::> 496 perl5.18 0.0 810M+ 0B N/A
2017 Nov 19 Vas 13:23:42 CET ::> 496 perl5.18 0.0 936M+ 0B N/A
2017 Nov 19 Vas 13:23:48 CET ::> 496 perl5.18 0.0 1061M+ 0B N/A
2017 Nov 19 Vas 13:23:54 CET ::> 496 perl5.18 0.0 1185M+ 0B N/A
2017 Nov 19 Vas 13:24:00 CET ::> 496 perl5.18 0.0 1328M+ 0B N/A
2017 Nov 19 Vas 13:24:06 CET ::> 496 perl5.18 0.0 1463M+ 0B N/A
2017 Nov 19 Vas 13:24:12 CET ::> 496 perl5.18 0.0 1589M+ 0B N/A
2017 Nov 19 Vas 13:24:18 CET ::> 496 perl5.18 0.0 1715M+ 0B N/A
2017 Nov 19 Vas 13:24:24 CET ::> 496 perl5.18 0.0 1840M+ 0B N/A
2017 Nov 19 Vas 13:24:30 CET ::> 496 perl5.18 0.0 1964M+ 0B N/A
2017 Nov 19 Vas 13:24:36 CET ::> 496 perl5.18 0.0 2090M+ 0B N/A
2017 Nov 19 Vas 13:24:43 CET ::> 496 perl5.18 0.0 2216M+ 0B N/A
2017 Nov 19 Vas 13:24:49 CET ::> 496 perl5.18 0.0 2365M+ 0B N/A
2017 Nov 19 Vas 13:24:55 CET ::> 496 perl5.18 0.0 2494M+ 0B N/A
2017 Nov 19 Vas 13:25:01 CET ::> 496 perl5.18 0.0 2620M+ 0B N/A
2017 Nov 19 Vas 13:25:07 CET ::> 496 perl5.18 0.0 2745M+ 0B N/A
2017 Nov 19 Vas 13:25:13 CET ::> 496 perl5.18 0.0 2870M+ 0B N/A
2017 Nov 19 Vas 13:25:19 CET ::> 496 perl5.18 0.0 2996M+ 0B N/A
2017 Nov 19 Vas 13:25:25 CET ::> 496 perl5.18 0.0 3121M+ 0B N/A
2017 Nov 19 Vas 13:25:31 CET ::> 496 perl5.18 0.0 3253M+ 0B N/A
2017 Nov 19 Vas 13:25:37 CET ::> 496 perl5.18 0.0 3399M+ 0B N/A
2017 Nov 19 Vas 13:25:43 CET ::> 496 perl5.18 0.0 3524M+ 0B N/A
2017 Nov 19 Vas 13:25:50 CET ::> 496 perl5.18 0.0 3649M+ 0B N/A
2017 Nov 19 Vas 13:25:56 CET ::> 496 perl5.18 0.0 3774M+ 0B N/A
2017 Nov 19 Vas 13:26:02 CET ::> 496 perl5.18 0.0 3899M+ 0B N/A
2017 Nov 19 Vas 13:26:08 CET ::> 496 perl5.18 0.0 4024M+ 0B N/A
2017 Nov 19 Vas 13:26:14 CET ::> 496 perl5.18 0.0 4149M+ 0B N/A
2017 Nov 19 Vas 13:26:20 CET ::> 496 perl5.18 0.0 4289M+ 0B N/A
2017 Nov 19 Vas 13:26:26 CET ::> 496 perl5.18 0.0 4370M+ 0B N/A
2017 Nov 19 Vas 13:26:32 CET ::> 496 perl5.18 0.0 4409M+ 0B N/A
2017 Nov 19 Vas 13:26:38 CET ::> 496 perl5.18 0.0 4319M+ 0B N/A
2017 Nov 19 Vas 13:26:44 CET ::> 496 perl5.18 0.0 4231M+ 0B N/A
2017 Nov 19 Vas 13:26:51 CET ::> 496 perl5.18 0.0 4152M+ 0B N/A
2017 Nov 19 Vas 13:26:57 CET ::> 496 perl5.18 0.0 4079M+ 0B N/A
2017 Nov 19 Vas 13:27:03 CET ::> 496 perl5.18 0.0 3934M+ 0B N/A
2017 Nov 19 Vas 13:27:09 CET ::> 496 perl5.18 0.0 3839M+ 0B N/A
2017 Nov 19 Vas 13:27:15 CET ::> 496 perl5.18 0.0 3741M+ 0B N/A
2017 Nov 19 Vas 13:27:21 CET ::> 496 perl5.18 0.0 3654M+ 0B N/A
2017 Nov 19 Vas 13:27:27 CET ::> 496 perl5.18 0.0 3566M+ 0B N/A
2017 Nov 19 Vas 13:27:33 CET ::> 496 perl5.18 0.0 3473M+ 0B N/A
2017 Nov 19 Vas 13:27:39 CET ::> 496 perl5.18 0.0 3377M+ 0B N/A
2017 Nov 19 Vas 13:27:45 CET ::> 496 perl5.18 0.0 3286M+ 0B N/A
2017 Nov 19 Vas 13:27:51 CET ::> 496 perl5.18 0.0 3189M+ 0B N/A
2017 Nov 19 Vas 13:27:58 CET ::> 496 perl5.18 0.0 3141M+ 0B N/A
2017 Nov 19 Vas 13:28:04 CET ::> 496 perl5.18 0.0 2987M+ 0B N/A
2017 Nov 19 Vas 13:28:10 CET ::> 496 perl5.18 0.0 2881M+ 0B N/A
2017 Nov 19 Vas 13:28:16 CET ::> 496 perl5.18 0.0 2796M+ 0B N/A
2017 Nov 19 Vas 13:28:22 CET ::> 496 perl5.18 0.0 2707M+ 0B N/A
2017 Nov 19 Vas 13:28:28 CET ::> 496 perl5.18 0.0 2615M+ 0B N/A
2017 Nov 19 Vas 13:28:34 CET ::> 496 perl5.18 0.0 2597M+ 0B N/A
2017 Nov 19 Vas 13:28:40 CET ::> 496 perl5.18 0.0 2499M+ 0B N/A
2017 Nov 19 Vas 13:28:46 CET ::> 496 perl5.18 0.0 2395M+ 0B N/A
2017 Nov 19 Vas 13:28:53 CET ::> 496 perl5.18 0.0 2310M+ 0B N/A
2017 Nov 19 Vas 13:28:59 CET ::> 496 perl5.18 0.0 2208M+ 0B N/A
2017 Nov 19 Vas 13:29:05 CET ::> 496 perl5.18 0.0 2052M+ 0B N/A
2017 Nov 19 Vas 13:29:11 CET ::> 496 perl5.18 0.0 1943M+ 0B N/A
2017 Nov 19 Vas 13:29:17 CET ::> 496 perl5.18 0.0 1832M+ 0B N/A
2017 Nov 19 Vas 13:29:23 CET ::> 496 perl5.18 0.0 1761M+ 0B N/A
2017 Nov 19 Vas 13:29:29 CET ::> 496 perl5.18 0.0 1669M+ 0B N/A
2017 Nov 19 Vas 13:29:35 CET ::> 496 perl5.18 0.0 1563M+ 0B N/A
2017 Nov 19 Vas 13:29:41 CET ::> 496 perl5.18 0.0 1452M+ 0B N/A
2017 Nov 19 Vas 13:29:47 CET ::> 496 perl5.18 0.0 1340M+ 0B N/A
2017 Nov 19 Vas 13:29:54 CET ::> 496 perl5.18 0.0 1275M+ 0B N/A
2017 Nov 19 Vas 13:30:00 CET ::> 496 perl5.18 0.0 1231M+ 0B N/A
2017 Nov 19 Vas 13:30:06 CET ::> 496 perl5.18 0.0 1142M+ 0B N/A
2017 Nov 19 Vas 13:30:12 CET ::> 496 perl5.18 0.0 1082M+ 0B N/A
2017 Nov 19 Vas 13:30:18 CET ::> 496 perl5.18 0.0 1042M+ 0B N/A
2017 Nov 19 Vas 13:30:24 CET ::> 496 perl5.18 0.0 1000M+ 0B N/A
2017 Nov 19 Vas 13:30:30 CET ::> 496 perl5.18 0.0 958M+ 0B N/A
2017 Nov 19 Vas 13:30:36 CET ::> 496 perl5.18 0.0 977M+ 0B N/A
2017 Nov 19 Vas 13:30:42 CET ::> 496 perl5.18 0.0 941M+ 0B N/A
2017 Nov 19 Vas 13:30:48 CET ::> 496 perl5.18 0.0 924M+ 0B N/A
2017 Nov 19 Vas 13:30:55 CET ::> 496 perl5.18 0.0 956M+ 0B N/A
2017 Nov 19 Vas 13:31:01 CET ::> 496 perl5.18 0.0 895M+ 0B N/A
2017 Nov 19 Vas 13:31:07 CET ::> 496 perl5.18 0.0 911M+ 0B N/A
2017 Nov 19 Vas 13:31:13 CET ::> 496 perl5.18 0.0 895M+ 0B N/A
2017 Nov 19 Vas 13:31:19 CET ::> 496 perl5.18 0.0 876M+ 0B N/A
2017 Nov 19 Vas 13:31:25 CET ::> 496 perl5.18 0.0 825M+ 0B N/A
2017 Nov 19 Vas 13:31:31 CET ::> 496 perl5.18 0.0 812M+ 0B N/A
2017 Nov 19 Vas 13:31:37 CET ::> 496 perl5.18 0.0 812M+ 0B N/A
2017 Nov 19 Vas 13:31:43 CET ::> 496 perl5.18 0.0 987M+ 0B N/A
2017 Nov 19 Vas 13:31:49 CET ::> 496 perl5.18 0.0 2058M+ 0B N/A
2017 Nov 19 Vas 13:31:56 CET ::> 496 perl5.18 0.0 2947M+ 0B N/A
2017 Nov 19 Vas 13:32:02 CET ::> 496 perl5.18 0.0 3178M+ 0B N/A
2017 Nov 19 Vas 13:32:08 CET ::> 496 perl5.18 0.0 3301M+ 0B N/A
2017 Nov 19 Vas 13:32:14 CET ::> 496 perl5.18 0.0 3429M+ 0B N/A
2017 Nov 19 Vas 13:32:20 CET ::> 496 perl5.18 0.0 4247M+ 0B N/A
2017 Nov 19 Vas 13:32:26 CET ::> 496 perl5.18 0.0 4674M+ 0B N/A
2017 Nov 19 Vas 13:32:32 CET ::> 496 perl5.18 0.0 5362M+ 0B N/A
2017 Nov 19 Vas 13:32:38 CET ::>
^C
keve@deimos:DATA$
内存使用量不断增加并不让我感到惊讶。但产量仍显示出一些意想不到的结果。我不明白为什么内存分配在13:26:57停止,为什么它开始从那一点开始释放内存,直到它下降到987M,同时脚本实际上正在读取和处理越来越多的产品标签。此外,当代码最终到达$t->purge();
行时,为什么内存使用会再次恢复?
注意:我还使用修改为$twig->purge() unless ($product_counter > 119334);
的行测试了脚本,该行不会清除最后一个(第119335个)产品,但仍然会清除所有其他产品。我故意不发布该输出,因为它几乎与我的原始输出相同。