LWP::UserAgentをwhile内で使用した時、メモリリークを起こすことがありました。
単純なコードですが、
my $ua = LWP::UserAgent->new; my $request = HTTP::Request->new(GET => $URL); while (1) { my $response = $ua->request($request); sleep 10; }
のように、リクエストを投げていました。
すると、数分毎に0.1%ずつメモリの使用量が増えていくという現象が発生。
増加率は少ないので、1日~2日かけてゆっくりと60%まで増えていっていました。
一応、バグレポートとして上がっていて、Net::SSLeayのOCSP処理の問題のようで、 OCSP Staplingが無効にするという対策で改善することができました。
use IO::Socket::SSL; my $ua = LWP::UserAgent->new; $ua->ssl_opts(SSL_ocsp_mode => SSL_OCSP_NO_STAPLE);