AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1161823
Accepted
user3840019
user3840019
Asked: 2024-07-01 17:29:24 +0800 CST2024-07-01 17:29:24 +0800 CST 2024-07-01 17:29:24 +0800 CST

O Linux automaticamente zera o tempo limite das conexões de entrada logo após aceitá-las

  • 772

Temos um servidor dedicado que funciona bem e aceita conexões de entrada. Ele também recebe e envia dados normalmente.

Funciona muito bem por algumas horas, mas depois disso todas as conexões aceitas expiram automaticamente logo após o soquete ser aceito.

Quanto mais soquetes ele aceitar, mais rápido ele entrará em um estado em que todas as novas conexões terão tempo limite esgotado.

O problema não é do cliente e nem é realmente pelo tempo que definimos em timeout, porque ele só acontece depois da aceitação na função read().

Quando reiniciamos o servidor, tudo começa a funcionar bem novamente.

Acredito que o Linux esteja causando esse problema. Não conheço bem o Linux, sei que há configurações no Linux que estão limitando meu processo.

Alguém pode sugerir material para leitura sobre configurações Linux para sockets TCP?

obrigado

linux
  • 2 2 respostas
  • 81 Views

2 respostas

  • Voted
  1. Artem Budaev
    2024-07-03T04:42:43+08:002024-07-03T04:42:43+08:00

    Você poderia fornecer mais detalhes? Que tipo de serviço aceita conexões? Qual distro é usada (por favor, forneça a saída de uname -a )? Você tem alguma informação nos logs de serviço?

    Você pode verificar os logs do sistema com os seguintes comandos systemctl status <service> para ver o status do serviço e algumas linhas de logs.

    E journalctl -x --lines 100 -u <serviço> para ver as últimas 100 linhas de logs de serviço.

    Também o comando dmesg ou arquivos como /var/log/syslog e /var/log/kern.log no caso de sistemas do tipo debian podem conter informações adicionais. Ou /var/log/messages no caso de sistemas do tipo rhel.

    O problema também pode estar relacionado ao número de arquivos abertos ou à configuração do serviço (como limite de conexões na configuração do banco de dados ou número máximo de threads no tomcat). Normalmente, os sistemas modernos não precisam de modificação das configurações padrão. Mas alguns sistemas antigos podem falhar ao abrir novas conexões se o limite for atingido. https://linux.die.net/man/5/limits.conf

    Configurações do kernel relacionadas à rede: https://docs.kernel.org/networking/ip-sysctl.html

    Os parâmetros podem ser configurados para todas as interfaces ou por interface usando o caminho apropriado. As configurações podem ser alteradas on-the-fly de duas maneiras (por exemplo, desabilitando o ipv6):

    1. echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 - desabilita o ipv6 para todas as interfaces até a reinicialização
    2. sysctl -w net.ipv6.conf.ens160.disable_ipv6=0 >> /etc/sysctl.d/sysctl.conf - desabilita o ipv6 para a interface ens160 e adiciona a linha apropriada no final de /etc/sysctl.d/sysctl.conf. Neste caso, as configurações serão aplicadas na próxima reinicialização.

    Comandos úteis que também podem ajudar: lsof para listar arquivos abertos (a conexão também é contada como arquivo) e ss ou netstat .

    Por exemplo, lsof -i:8090 listará todas as conexões na porta 8090. E lsof -p 2345 listará todos os arquivos e conexões abertas pelo processo com PID 2345.

    Observe que antes de fazer qualquer alteração nos parâmetros do kernel é melhor saber a causa real.

    • 0
  2. Best Answer
    user3840019
    2024-10-08T02:14:45+08:002024-10-08T02:14:45+08:00

    depois de meses lutando com isso, descobri a raiz do problema.

    Fechei o fd 0, que é o stdin, e novos sockets de entrada escolheriam o fd 0 e, no meu código, eu esperava que qualquer fd válido fosse maior que 0, caso contrário significaria que já estava fechado ou deveria ser despejado das conexões válidas (e eu fecho esse fd para ter certeza :D antes de despejar).

    e isso fazia com que o fd 0 sempre fosse fechado após ser selecionado.

    a culpa foi minha.

    • 0

relate perguntas

  • Como descobrir detalhes sobre hardware na máquina Linux?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve