2012-10-01 65 views
2

我想通過HTTPS連接時發現LWP的內存泄漏。用下面的腳本,不斷內存使用率增加:使用HTTPS的Perl的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 /地穴:: SSLeay的0.58/Mac的OS X 10.7。 4

有沒有人知道解決這個問題的方法?


UPDATE

的Perl 5.12.4/LWP 6.05 /地穴:: SSLeay的0.64/Mac OS X的10.8.4

通過HTTPS連接時,內存泄漏仍然存在。要試用它,請在終端上運行示例腳本,並通過活動監視器查看內存的增長和增長情況。


UPDATE

一些測試我發現,最近我的圖書館的升級,仍然有內存泄漏之後,但當你調用特定的地址通過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); 
} 


UPDATE

我報告的錯誤的和其他一些人也證實了我的發現:https://rt.cpan.org/Ticket/Display.html?id=88287

+0

版本或Perl/LWP/Crypt :: SSLeay?平臺? – raina77ow

+0

您是否期望程序的大小縮小?在Unix上,他們不這樣做。高水位正在上升,隨着內存的釋放,它被保存在池中供程序重用,但它們從不縮水。 –

+0

我剛剛添加了版本號。不,我不希望它縮小,但是這個腳本是某種機器人,經過短短几天的運行,腳本已經使用了500 Mb。 – calvillo

回答

1

在Linux上,用Perl 5.10,Crypt 0.58,Lwp 6.02的內存使用量是不變的。嘗試將您的perl模塊升級到最新版本。

如果問題仍然存在,請爲此問題創建RT票證,並且此模塊的維護人員將修復泄漏。

問候,

+0

謝謝。我會檢查並更新問題以供將來參考。 – calvillo

0

它的出現,至少對我來說,就可以解決此問題通過禁用驗證主機名:

my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); 

顯然,這是不建議,如果安全性對你的應用程序非常重要!