Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

190
Visualizações
por qué los descriptores de archivos abiertos no se reutilizan sino que aumentan en valor numérico

Tengo un servidor HTTP C simple. Cierro los descriptores de archivo para los archivos de disco y los nuevos fd s de conexión devueltos por accept(...) , pero noté que obtengo nuevos números de descriptor de archivo que son más grandes que los números anteriores: por ejemplo, el descriptor de archivo de accept return comienza con 4 , luego 5, luego 4 nuevamente y así sucesivamente hasta que el descriptor de archivo alcance el máximo descriptor de archivo abierto en un sistema.

Establecí el valor en 10,000 en mi sistema, pero no estoy seguro de por qué exactamente el número del descriptor de archivo salta al valor máximo. Y estoy un poco seguro de que mi programa está cerrando los descriptores de archivos.

Entonces, me gustaría saber si no hay miles de conexiones, entonces ¿por qué el nuevo número de descriptores de archivo aumenta periódicamente: en aproximadamente 24 horas recibo el mensaje accept: too many open files . ¿Qué es este mensaje?

Además, ¿el valor ulimit -n number se restablece automáticamente sin reiniciar el sistema?

como se menciona en la respuesta. La salida de _2$ ps aux | grep lh es

 dr-x------ 2 fawad fawad 0 Oct 11 11:15 . dr-xr-xr-x 9 fawad fawad 0 Oct 11 11:15 .. lrwx------ 1 fawad fawad 64 Oct 11 11:15 0 -> /dev/pts/3 lrwx------ 1 fawad fawad 64 Oct 11 11:15 1 -> /dev/pts/3 lrwx------ 1 fawad fawad 64 Oct 11 11:15 2 -> /dev/pts/3 lrwx------ 1 fawad fawad 64 Oct 11 11:25 255 -> /dev/pts/3

y la salida de ls -la /proc/$$/fd es

 root 49855 0.5 5.4 4930756 322328 ? Sl Oct09 15:58 /usr/share/atom/atom --executed-from=/home/fawad/Desktop/C++-work/lhparse --pid=49844 --no-sandbox root 80901 0.0 0.0 25360 5952 pts/4 S+ 09:32 0:00 sudo ./lh root 80902 0.0 0.0 1100852 2812 pts/4 S+ 09:32 0:00 ./lh fawad 83419 0.0 0.0 19976 916 pts/3 S+ 11:27 0:00 grep --color=auto lh

Me gusta saber qué es la columna pts/4, etc. ¿Es este el número del descriptor del archivo?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Es probable que el socket representado por el descriptor de archivo esté en estado close_wait o time_wait. Lo que significa que la pila TCP mantiene el fd abierto durante un poco más de tiempo. Por lo tanto, no podrá reutilizarlo inmediatamente en este caso.

Una vez que el socket esté completamente terminado y cerrado, el número del descriptor de archivo estará disponible para su reutilización dentro de su programa.

Ver: https://en.m.wikipedia.org/wiki/Transmission_Control_Protocol

Operación de protocolo y específicamente estados de espera.

Para ver qué archivos aún están abiertos, puede ejecutar

 ls -la /proc/$$/fd

La salida de esto también será de ayuda.

 ss -tan | head -5 LISTEN 0 511 *:80 *:* SYN-RECV 0 0 192.0.2.145:80 203.0.113.5:35449 SYN-RECV 0 0 192.0.2.145:80 203.0.113.27:53599 ESTAB 0 0 192.0.2.145:80 203.0.113.27:33605 TIME-WAIT 0 0 192.0.2.145:80 203.0.113.47:50685
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda