【发布时间】:2014-04-20 22:19:18
【问题描述】:
您好,我构建了一个非常简单的 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;
【问题讨论】:
-
标签说 POE,描述和代码说 IO::Async。我会重新标记
-
@LeoNerd 嗯,我只是没有找到 io::async 标签,谢谢
标签: linux perl networking io-async