我认为通过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连接时,内存泄漏仍然存在。要试用它,请在终端上运行示例脚本,然后使用Activity Monitor查看内存是否增长和增长。
<小时/> 的更新
经过一些测试后,我发现,最近我的库升级后,仍然存在内存泄漏,但仅在通过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
答案 0 :(得分:1)
在linux上,使用perl 5.10,Crypt 0.58,Lwp 6.02,内存使用量是恒定的。尝试将perl模块升级到最新模块。
如果问题仍然存在,请为此问题创建RT票证,此模块的维护者将修复泄漏。
此致
答案 1 :(得分:1)
至少在我看来,您可以通过禁用验证主机名来解决此问题:
my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
显然,如果安全性对您的应用程序很重要,则不建议这样做!