嗨,我建立了一个非常简单的 HTTP 服务器,只是为了对 POE 模块进行压力测试。
这是我测试它的方法:
for x in {1..10000}; do
curl xxxxx:12342 --retry-delay 5 --retry 3 -d randombytes$x
done
当我这样做时,我通过对等消息看到多个“连接重置”,因此对于这个 10k 连接,我总共丢失了大约 1200 个请求。
有没有办法提高它的性能?在同一台服务器上测试 nginx,在此期间没有更改内核参数,根本没有连接重置消息。
编辑
我已经增加了 max fileno / per user max fileno,前者是fs.file-max = 3246455
,后者是10240
附上源代码:
use strict;
use warnings;
use feature 'say';
use Net::Async::HTTP::Server;
use IO::Async::Loop;
use HTTP::Request;
use HTTP::Response;
use Data::Dumper;
my $loop = IO::Async::Loop->new();
my $httpserver = Net::Async::HTTP::Server->new(
on_request => sub {
my ($self, $req) = @_;
my ($code, $result) = (200, "It works\n");
my $response = HTTP::Response->new ($code);
$response->add_content ($result);
$response->content_type ("application/json");
$response->content_length (length $response->content);
$req->respond($response);
},
);
$loop->add( $httpserver );
$httpserver->listen(
addr => { family => "inet", socktype => "stream", port => 8080 },
on_listen_error => sub { die "Cannot listen - $_[-1]\n" },
);
say 'Listening normally on ', 8080;
$loop->run;