• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

120
Views
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?

about 3 years ago · Santiago Trujillo
1 answers
Answer question

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
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error