Tempo de inatividade causado por muitos arquivos abertos

Parte do conteúdo foi extraído de https://blog.csdn.net/qq_18581221/article/details/80963741

1. Descrição básica, causa e solução do problema

insira a descrição da imagem aqui
A razão para este erro é que o número de arquivos abertos (tudo no Linux é um arquivo, então o número de arquivos abertos inclui o número de arquivos e conexões Socket) excede o número máximo definido pelo Linux;
insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui

2. Casos reais encontrados

1. Análise do problema

O conteúdo acima foi extraído da postagem do blog acima; o problema é descrito grosseiramente, então não vou descrevê-lo aqui e também fornecer algumas soluções usando configuração;

Abaixo, vou citar um problema encontrado em um cenário real para solução de problemas e análise;
muitos arquivos abertos, se é verdade que são necessários tantos recursos, pode ser resolvido modificando a configuração;
mas temos que considerar uma situação de vazamento de handle; por exemplo, o seguinte caso:
ocorre um erro de muitos arquivos abertos quando um serviço está fora do ar.
insira a descrição da imagem aqui
Reinicie o serviço e tudo ficará bem; outros colegas ajustaram os parâmetros do identificador, como ilimitado, mas o serviço ainda apresenta o mesmo problema nos próximos dias; o que isso significa
?
Isso mostra que não importa o tamanho que você ajuste, conforme o serviço é executado, o número de identificadores sempre será usado; então há um vazamento de identificador no programa; por exemplo, o fluxo de arquivo não é fechado, o soquete não é fechado etc.; semelhante ao vazamento de conexão do banco de dados, a conexão não é fechada; semelhante ao vazamento causado pela conexão redis não sendo fechada;

Como solucionar:
imprima diretamente o uso do identificador naquele momento, verifique o uso do identificador, lsof > a, ou seja, imprima o uso do identificador do servidor linux para o arquivo a; conforme mostrado na figura, é basicamente causado pelo arquivo mobile.properties, indicando que este arquivo está aberto em algum lugar, mas o processo de IO não está fechado, resultando em um vazamento de identificador
;

insira a descrição da imagem aqui

E nossa mensagem de erro estava relacionada ao arquivo mobile.properties. Claro, este local é uma coincidência. Pode ser que os arquivos neste local sejam lidos com relativa frequência e outros arquivos não sejam lidos, ou mesmo nenhum, então esse erro é apenas refletido; assumindo que a operação de um sistema pode abrir e fechar arquivos o tempo todo, então, uma vez que o identificador vazou, vários relatórios de erro podem aparecer e não poderemos descobrir que o relatório de erro está relacionado a este arquivo;
insira a descrição da imagem aqui

Em seguida, verificamos a pilha do código acima e descobrimos que fis não está fechado primeiro, e a maneira mais segura é fechá-lo finalmente;
aqui, referências repetidas a fis também são arquivos, o que levará a vazamentos;
insira a descrição da imagem aqui

2. Solução:

O código acima pode ser reparado e fechado;

Acho que você gosta

Origin blog.csdn.net/wf_feng/article/details/121866380
Recomendado
Clasificación