我想我在通过 HTTPS 连接时发现了 LWP 的内存泄漏。使用以下脚本,内存使用量不断增加:
use LWP::UserAgent;
$ua = LWP::UserAgent->new();
$request = HTTP::Request->new(GET=>'https://www.google.com/');
while (1) {
$response = $ua->request($request);
sleep(1);
}
这个其他脚本没有问题:
use LWP::UserAgent;
$ua = LWP::UserAgent->new();
$request = HTTP::Request->new(GET=>'http://www.google.com/'); # https => http
while (1) {
$response = $ua->request($request);
sleep(1);
}
Perl 5.12.3 / LWP 5.837 / Crypt::SSLeay 0.58 / Mac OS X 10.7.4
有谁知道解决这个问题的方法?
更新
Perl 5.12.4 / LWP 6.05 / Crypt::SSLeay 0.64 / Mac OS X 10.8.4
通过 HTTPS 连接时仍然存在内存泄漏。要试用它,请在终端上运行示例脚本,然后使用活动监视器查看内存增长和增长。
更新
经过一些测试,我发现,随着我的库最近升级,仍然存在内存泄漏,但只有当您通过 HTTPS 调用某些地址时才会发生这种情况。在上面的示例中,我调用了https://www.google.com,它恰好是这些地址之一。例如,这段代码没有给我任何内存泄漏:
use LWP::UserAgent;
$ua = LWP::UserAgent->new();
$request = HTTP::Request->new(GET=>'https://twitter.com/'); # www.google.com => twitter.com
while (1) {
$response = $ua->request($request);
sleep(1);
}
更新
我报告了这个错误,其他一些人也证实了我的发现: https ://rt.cpan.org/Ticket/Display.html?id=88287