Muitos profissionais que trabalham com suporte a redes e servidores web já devem ter se deparado com problemas quanto à quantidade de conexões de um cliente junto a um servidor e com a quantidade de conexões persistentes junto ao mesmo servidor.

Existe um ditado entre os administradores de grandes servidores WEB que diz que mais de 10.000 conexões simultâneas em um único servidor causa sérios problemas de performance e em alguns casos, o shutdown do próprio servidor. Isso é verdade, desde que o administrador do ambiente não tenha feito um tuning no servidor, uma configuração que tem como objetivo melhorar a performance.

As principais configurações para melhora de performance de um servidor web estão relacionadas diretamente a redes e a memória, isso porque quanto mais conexões um servidor tiver, mais memória ele irá precisar para processá-las.

Mais de 95% dos grandes ambientes web utilizam servidores Linux para suportá-los pelo simples fato que Linux, além de ser mais robusto e performático, é mais fácil de parametrizar do que servidores Windows. Digo-lhes que no início da minha carreira, eu achava fantástico poder alterar diversos parâmetros de servidores, tanto Sun Solaris como Linux. Hoje, isso é um procedimento normal e necessário para manter o seu ambiente estável e performática, tanto que algumas empresas possuem configurações pré-definidas dependendo do ambiente e da utilização do servidor.

Uma das práticas de tuning mais executadas para servidores Web é alteração de parâmetros TCP/IP para que o servidor possa trabalhar com mais conexões, atendendo assim um número maior de requisições. Há uma série de parâmetros que podemos alterar em um servidor Linux e quase todos são configurados no arquivo /etc/sysctl.conf.

Uma informação importante que todo o administrador de redes ou de servidores precisa saber é que  um servidor pode ter 64.000 conexões por IP de um cliente conectado, caso você tenha mais clientes conectados com ips distintos, é só multiplicar a quantidade de clientes por 64.000, ai você terá a quantidade de conexões que o seu servidor suportará, mas não se esqueçam que para isso é necessário a inclusão de alguns parâmetros no seu servidor como os demonstrados abaixo:

fs.file-max = 999999

net.ipv4.tcp_rmem = 4096 4096 16777216

net.ipv4.tcp_wmem = 4096 4096 16777216

Vejam que a segunda e a terceira linha são relativas à rede que utilizam variáveis referentes a quantidade de memória do seu servidor. O primeiro parâmetro diz respeito à quantidade de descritores que serão utilizados para leitura e escrita, principalmente relacionado à quantidade de conexões que ele, o servidor, poderá aceitar.

Eu sempre crio um documento base para todos os projetos que  participo com uma série de parâmetros e configurações para melhorar a performance de servidores Linux, porém alguns destes parâmetros são descartados devido a não compatibilidade com uma determinada versão de Linux, distribuição, hardware ou até mesmo, finalidade que aquele servidor terá.

Hoje, existem empresas que possuem mais de 500.00 conexões TCP/IP concorrentes em seus servidores, e isso só é possível graças ao tuning do sistema operacional que estes servidores possuem para suportá-lo.

Redes 10Gbps é uma tecnologia que provocou uma grande alteração na forma a qual os servidores eram configurados, isso porque diversos servidores tiveram os seus parâmetros configurados ao máximo para atender um número de conexões que antes era tido como impossível, mas que hoje, devido a redes sociais, ferramentas colaborativas e o aumento do tráfego Internet é uma coisa cotidiana.

A implementação de soluções com Memcached, NginX e F5 BIG-IP LTM(load balancing) ocorre de forma rotineira nas grandes empresas que precisam de alta performance em seus ambientes. Cache virou a solução de todos os problemas, isso devido ao aumento desta tecnologia em grandes portais web. Eu não vejo nenhum grande portal web hoje que não utilize alguma solução ou tecnologia de cache.

Não existe a melhor ou pior parametrização para um servidor, mas sim, a mais adequada, onde ela dependerá do seu conhecimento técnico, como do ambiente que você administra.