Eu nunca encontrei esse problema. No entanto, você provavelmente deve aumentar a largura da tabela de hash para reduzir sua profundidade. Usando o "dmesg", você verá quantas entradas você tem atualmente:
$ dmesg | grep '^IP route'
IP route cache hash table entries: 32768 (order: 5, 131072 bytes)
Você pode alterar esse valor com o parâmetro de linha de comando de inicialização do kernel rhash_entries
. Primeiro, tente-o manualmente e adicione-o ao seu lilo.conf
ou grub.conf
.
Por exemplo: kernel vmlinux rhash_entries=131072
É possível que você tenha uma tabela de hash muito limitada, porque você atribuiu pouca memória à sua VM HAProxy (o tamanho de hash da rota é ajustado dependendo da RAM total).
Em relação a tcp_mem
, tenha cuidado. Suas configurações iniciais me fazem pensar que você estava executando com 1 GB de RAM, 1/3 dos quais poderiam ser alocados para soquetes TCP. Agora você alocou 367872 * 4096 bytes = 1,5 GB de RAM para soquetes TCP. Você deve ter muito cuidado para não ficar sem memória. Uma regra é alocar 1/3 da memória para HAProxy e outro 1/3 para a pilha TCP e o último 1/3 para o resto do sistema.
Eu suspeito que sua mensagem "sem memória de soquete" vem das configurações padrão em tcp_rmem
e tcp_wmem
. Por padrão, você tem 64 kB alocados na saída para cada soquete e 87 kB na entrada. Isso significa um total de 300 kB para uma conexão com proxy, apenas para buffers de soquete. Acrescente a isso 16 ou 32 kB para o HAProxy, e você verá que com 1 GB de RAM você suportará apenas 3000 conexões.
Alterando as configurações padrão de tcp_rmem
e tcp_wmem
(middle param), você pode ficar muito mais baixo na memória. Eu obtenho bons resultados com valores tão baixos quanto 4096 para o buffer de gravação e 7300 ou 16060 em tcp_rmem
(5 ou 11 segmentos TCP). Você pode alterar essas configurações sem reiniciar, mas elas só se aplicam a novas conexões.
Se você preferir não tocar muito em seus sysctls , o mais recente HAProxy, o 1.4-dev8, permite que você ajuste esses parâmetros da configuração global e por lado (cliente ou servidor).
Espero que isso ajude!