Pregunta

Estoy teniendo algunos problemas en mi primera incursión en subprocesos en C. Estoy intentando (por ahora) escribir un programa de servidor muy simple que acepte una conexión de socket e inicie un nuevo subproceso para procesarlo. Parece funcionar bien, excepto que solo creará unos 300 subprocesos (303, a veces 304) antes de que pthread_create () falle con el código EAGAIN, lo que significa:

" El sistema carecía de los recursos necesarios para crear otro subproceso, o se superaría el límite impuesto por el sistema en el número total de subprocesos en un proceso {PTHREAD_THREADS_MAX}. "

Esto es no 303 hilos al mismo tiempo: cada hilo sale, lo cual está confirmado por gdb. Cada vez que se llama a la función de solicitud de proceso, hay dos subprocesos en ejecución.

Eso significa que "el sistema carecía de los recursos necesarios". Mi pregunta es (y puede ser un poco estúpida): ¿cuáles son estos recursos? Presumiblemente es una pérdida de memoria en mi programa (ciertamente es posible, probablemente incluso), pero hubiera pensado que aún así podría administrar más de 300 considerando que el resto del programa hace muy poco.

¿Cómo puedo saber cuánta memoria tiene disponible mi programa para confirmar que se está quedando sin ella? Hay mucha memoria y espacio libre de intercambio, por lo que presumiblemente hay un límite artificial impuesto por el sistema operativo (Linux).

Gracias

¿Fue útil?

Solución

Si no está creando el hilo con el atributo PTHREAD_CREATE_DETACHED (o separándolos con pthread_detach () , es posible que deba llamar a pthread_join () en cada subproceso creado después de que salga para liberar los recursos asociados con él.

Otros consejos

Posiblemente un poco exagerado (?) pero Valgrind puede ayudarlo a ubicar los memleaks en Linux.

¿Podrías publicar algunos fragmentos de código? Preferiblemente las partes donde asignas / liberas memoria / sockets y donde creas tus hilos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top