2

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を介して接続する場合、メモリリークは依然として存在します。試してみるには、ターミナルでサンプルスクリプトを実行し、ActivityMonitorでメモリが増えていくのを確認してください。


アップデート

いくつかのテストの結果、最近のライブラリのアップグレードでは、まだメモリリークが発生していることがわかりましたが、HTTPSを介して特定のアドレスを呼び出した場合にのみ発生します。上記の例では、https://www.google.comに電話をかけていましたが、これはたまたまそれらのアドレスの1つです。たとえば、このコードではメモリリークは発生しません。

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

4

2 に答える 2

1

Linuxでは、perl 5.10、Crypt 0.58、Lwp6.02ではメモリ使用量は一定です。perlモジュールを最新のものにアップグレードしてみてください。

問題がまだ存在する場合は、この問題のRTチケットを作成すると、このモジュールのメンテナンス担当者がリークを修正します。

よろしく、

于 2012-10-02T07:34:52.413 に答える
1

少なくとも私にとっては、ホスト名の検証を無効にすることでこの問題を回避できるようです。

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

アプリケーションにとってセキュリティが重要な場合は、明らかにこれはお勧めしません。

于 2014-07-13T19:23:23.467 に答える