Eu tenho um aplicativo em execução no AIX 6.1 que tem um único processo de servidor que atende e pesquisa conexões tcp e encaminha simplesmente mensagens para outro processo usando uma fila de mensagens IPC. Está em serviço há anos e rotineiramente lida com 1.000 ou mais conexões sem problemas. Mas ontem tivemos uma situação em que as conexões com esse servidor estavam atingindo uma grande porcentagem do tempo. Ao mesmo tempo, as conexões com outra instância deste servidor (escutando em um número de porta diferente na mesma máquina) estavam funcionando bem. Além disso, os dados que fluem nas conexões existentes eram bons e a carga do processador era pequena.
Essa situação persistiu por várias horas e continuou a acontecer mesmo depois de reiniciar o listener em questão. Então, de repente, esta manhã, esclareceu e tudo está funcionando normalmente.
O que é realmente estranho nisso é que as conexões internas de um processo do cliente sendo executado na mesma máquina servidor também estavam sendo atrasadas e, ocasionalmente, expirando.
Existe alguma maneira de as solicitações de conexão ficarem presas a uma conexão com falha de algum lugar da rede, de modo a fazer com que o serviço pareça indisponível para todos por um longo período de tempo? trabalhando normalmente? E para isso afetar apenas novas conexões - não os soquetes existentes sendo manipulados pelo mesmo processo?
Obrigado Rob
Nota - podemos ter resolvido isso. Parece que havia um local de rede que estava obtendo conexões parciais (talvez os pacotes de entrada fossem roteáveis, mas não de saída). De qualquer forma, havia um monte de conexões no estado SYN_RCVD, e o parâmetro 'backlog' no soquete de escuta do servidor tinha apenas 5, então um monte de usuários tentando se conectar a partir do local ruim foi o suficiente para consumir todo o backlog disponível e não deixar mais ninguém entrar - eu acho que até que alguma coisa acabasse com as conexões parciais.
Então, eu acho que vou modificar minha pergunta e apenas perguntar qual é a boa regra para definir o parâmetro 'Backlog' como listen (). Eu bati de 5 a 20 por enquanto - mas nós vivemos com 5 anos sem problemas.