Seu problema provavelmente é com o sysctl nos servidores Apache.
Algumas suposições: Normalmente, o Varnish é muito mais rápido no processamento de cada conexão do que em um servidor da Web (a menos que seus servidores Varnish tenham muito menos CPU e seus servidores Apache estejam apenas servindo arquivos estáticos armazenados em cache na memória). Apache.
Portanto, os recursos em seus servidores Apache podem ser amplos, mas as solicitações terão que ficar em fila em algum lugar, ainda que muito brevemente. No momento, eles não estão fazendo fila de uma maneira saudável, onde acabam sendo processados.
Parece que suas solicitações estão ficando presas no verniz e não estão sendo feitas nos servidores Apache.
Há alguma evidência para isso:
Observe que, antes de fazer o backup dos SYN_SENTs, os pedidos em TIME_WAIT aumentam, depois de um ponto, eles começam a acumular-se como SYN_SENTS. Isso indica que as solicitações estão começando a ser respondidas mais lentamente, depois a fila faz o backup e as solicitações não são respondidas.
Isso indica para mim que o seu servidor Apache não está aceitando conexões suficientes (onde eles podem se sentar e fazer fila para o Apache processá-los.)
Eu vejo vários limites possíveis no seu arquivo de configuração:
Quando você tem pico, você tem aproximadamente 30000 conexões no estado SYN_SENT no seu servidor Varnish.
No entanto, no servidor Apache seu max_syn_backlog é apenas 16384. Seu somaxconn é apenas 2048.
Observe também que o tamanho de seus buffers de memória de rede nos servidores Apache é muito baixo. Você os ajustou no servidor Varnish para 16MB. Mas no servidor Apache seu net.ipv4.tcp_rmem é de apenas 524KB para corresponder ao seu net.core.rmem_max.
Eu recomendo aumentar todos esses parâmetros no servidor Apache.
Você precisará se concentrar mais nos diagnósticos do servidor Apache para descobrir exatamente o que está acontecendo, mas talvez não seja necessário aumentar esses valores.
Você provavelmente não deve ajustar net.ipv4.tcp_mem. Observe que a unidade para este parâmetro está em páginas, não em bytes, copiando assim o mesmo valor de net.ipv4.tcp_rmem ou net.ipv4.tcp_wmem (ambos em bytes) não faz qualquer sentido. É sintonizado automaticamente pelo linux com base na sua quantidade de memória, por isso raramente precisa de ajuste. Na verdade, esse pode ser o seu problema, limitando arbitrariamente a memória disponível para o enfileiramento geral de conexões.
Veja: link
Observe também que "vm.swappiness = 0" está definido duas vezes, uma vez como 10 e novamente na parte inferior como 0, que é o valor efetivo.