From cc422b3308059e10e56d0a475e5ed5a3f00cb2cf Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 16 Apr 2013 09:09:41 +0200 Subject: [PATCH] stop keep-alive when there are many open connections We try to avoid to reach the max_conn limit. --- PVE/HTTPServer.pm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/PVE/HTTPServer.pm b/PVE/HTTPServer.pm index 864b6ffa..410cf336 100755 --- a/PVE/HTTPServer.pm +++ b/PVE/HTTPServer.pm @@ -931,6 +931,11 @@ sub accept_connections { my $reqstate = { keep_alive => $self->{keep_alive} }; + # stop keep-alive when there are many open connections + if ($self->{conn_count} >= $self->{max_conn_soft_limit}) { + $reqstate->{keep_alive} = 0; + } + if (my $sin = getpeername($clientfh)) { my ($pport, $phost) = Socket::unpack_sockaddr_in($sin); ($reqstate->{peer_port}, $reqstate->{peer_host}) = ($pport, Socket::inet_ntoa($phost)); @@ -1048,6 +1053,8 @@ sub new { $self->open_access_log($self->{logfile}) if $self->{logfile}; + $self->{max_conn_soft_limit} = $self->{max_conn} > 100 ? $self->{max_conn} - 20 : $self->{max_conn}; + $self->{socket_watch} = AnyEvent->io(fh => $self->{socket}, poll => 'r', cb => sub { eval { if ($self->{conn_count} >= $self->{max_conn}) { -- 2.39.5