perl – 为什么要提高plackup(或starman)的内存使用率?
我有这个简单的PSGI应用程序(app.psgi).
use strict; use warnings; my $app = sub { my $mem = `ps -o rss= -p $$`; $mem =~ s/^s*|s*$//gs; return [ 200,[ 'Content-Type' => 'text/text' ],[ $mem ]]; }; 我被要求上述1000次并增加了内存使用量.根据启动服务器的方式,得到: > plackup – 内存使用率在前3个请求中提高,并在接下来的997个请求中保持不变 问题是: >为什么提高内存使用率?泄漏在哪里,以及如何实现恒定的内存使用(特别是在starman上),因为我不想长期耗尽内存. (好的,可以定义例如–max-requests 100),但它不是内存使用的答案. 如果有人想测试这个 – 这是我的获取脚本: use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(GET => 'http://localhost:5000'); my $old_mem = 0; print "req#tmemn"; foreach my $i (1..1000) { my $res = $ua->request($req); (my $mem = $res->content) =~ s/D//g; next if( $mem == $old_mem ); print "$it$memn"; $old_mem = $mem; } 我的结果: plackup plackup -r starman req# mem req# mem req# mem 1 7780 1 3924 1 3280 2 7800 2 4296 5 3728 3 7804 3 4304 8 3280 ... ... ... deleted ... deleted ... ... 839 4596 994 3912 866 4600 998 3908 962 4604 1000 3912 所以, >为什么在前3个请求中提升? 版本: # cpanm Plack Starman Plack is up to date. (0.9979) Starman is up to date. (0.2010) # perl -v This is perl 5,version 12,subversion 3 (v5.12.3) built for darwin-thread-multi-2level 解决方法
根据
miyagava的评论,答案是:
感谢名单. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |