]> git.proxmox.com Git - pve-manager-legacy.git/commitdiff
stop keep-alive when there are many open connections
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 16 Apr 2013 07:09:41 +0000 (09:09 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 16 Apr 2013 07:09:41 +0000 (09:09 +0200)
We try to avoid to reach the max_conn limit.

PVE/HTTPServer.pm

index 864b6ffae5cc4fe1195b01051f240419ec7c778f..410cf3368808602652d09bc36e8e538d555279cd 100755 (executable)
@@ -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}) {