Recuento de hilos de un proceso en Linux

Cuando se ejecuta un programa en Linux, se carga una instancia de ese programa en la memoria junto con todos los recursos que necesita. Esta instancia del programa en la memoria se llama proceso. Los procesos de Linux, específicamente los pesados (HWP), incluyen una gran cantidad de sobrecarga cuando se crean o conmutan desde otro proceso. Al contrario, un hilo es un proceso ligero (LWP) en un sistema operativo informático. Puede compartir recursos como código, datos, E/S de archivos, pila y tablas de señales. Eso es lo que los hace ligeros. A diferencia de los procesos, los hilos no necesitan vaciar y recrear todas las tablas antes de que se puedan conmutar. Por lo tanto, se pueden cambiar con más facilidad y frecuencia.

Sin embargo, Linux no distingue entre un proceso y un hilo a nivel del sistema operativo. Los hilos siguen siendo procesos en Linux. Solo los hilos pueden compartir ciertos recursos con otros procesos. A diferencia de otros sistemas operativos, Linux no proporciona estructuras de datos de hilos ni opciones de programación específicas. El kernel no hace distinción aquí.

Sin embargo, los hilos o procesos ligeros todavía se pueden utilizar en Linux para lograr el paralelismo y el procesamiento de varios núcleos al dividir un proceso en varios hilos. De esta manera, cada hilo se puede ejecutar en un núcleo del procesador separado para lograr un verdadero paralelismo. Debido a que los procesos ligeros ya son tan ligeros en Linux, el cambio entre hilos no genera grandes sobrecargas.

Este artículo cubrirá las limitaciones de los hilos y procesos en un sistema Linux, cómo encontrar estos límites, cómo aumentar el número máximo de hilos y —finalmente— algunos comandos comunes para comprobar el número de hilos por proceso en un sistema Linux.

Limitaciones de los hilos en Linux

Como cualquier sistema operativo, existen ciertos límites para los subprocesos en Linux. Linux almacena las configuraciones como archivos y la mayoría de los parámetros de configuración del kernel se almacenan en la ruta /proc/sys/kernel/. La configuración para el número máximo de subprocesos que el kernel puede ejecutar se almacena en proc/sys/kernel/threads-max.

Al utilizar el comando command en este archivo, se mostrará el número máximo de hilos para el sistema. En la figura 1, el número máximo de hilos es 3.935. Esto se ejecutó en un servidor de núcleo único utilizado para alojar un sitio web estático, por lo que el número máximo de hilos es bajo en comparación con los procesadores de varios núcleos:

Fig 1: Maximum threads in a Linux system Fig 1: máximo de hilos en un sistema Linux

El comando sysctl también se puede usar con una opción y filtrar usando grep para comprobar la misma configuración del núcleo. La figura 2 muestra la salida del siguiente comando:

sysctl -a | grep threads-max
Fig 2: sysctl output with maximum threads Fig 2: salida de sysctl con el máximo de hilos

Arriba puedes ver que ambos comandos dan la misma salida. Del mismo modo, hay un parámetro de configuración del núcleo para el número máximo de procesos que un núcleo puede ejecutar simultáneamente. Esta configuración está en un archivo en /proc/sys/kernel/pid_max. Podemos consultar este archivo para ver el número, como se muestra en la figura 3:

Fig 3: Maximum number of processes in a Linux system Fig 3: número máximo de procesos en un sistema Linux

La salida en la figura 3 es del mismo servidor de núcleo único, por lo que el número es bajo. Este último también se encuentra alrededor del punto en el que se envuelven los ID de proceso o PID, por lo que podríamos encontrar periódicamente PID duplicados durante el mantenimiento.

Debido a que Linux no diferencia entre procesos e hilos, el número máximo de procesos también es el número máximo de hilos. Si el sistema alcanza el límite y ninguno de los procesos está listo para ser terminado, el sistema no será capaz de crear un nuevo proceso e hilo.

Aumentar el número máximo de hilos en Linux

El número de hilos en Linux está limitado por algunos factores, sobre todo el tamaño de la memoria virtual. Esta es la fórmula utilizada para calcular el número máximo de hilos para un sistema:

número máximo de hilos = tamaño de memoria virtual / (tamaño de pila * 1024 * 1024)

Como se muestra en la fórmula, el aumento del tamaño de memoria virtual o la disminución del tamaño de pila por hilo provocará un aumento en el número máximo de hilos. Para realizar este ajuste con mayor precisión, se puede utilizar el comando ulimit para comprobar el tamaño de pila actual en un sistema:

ulimit -a | grep "stack size"

A continuación, la figura 4 muestra el tamaño de pila de un servidor de núcleo único:

Fig 4: Stack size Fig 4: tamaño de pila

Podemos cambiar este tamaño de pila usando el mismo comando ulimit:

ulimit -s 8192

Comandos de hilo útiles en Linux

Linux proporciona unos cuantos comandos para listar fácilmente todos los procesos e hilos. También cuenta con algunos para filtrar los hilos para un proceso determinado. La siguiente sección muestra cómo utilizar estos comandos para obtener información relacionada con el hilo.

Información del proceso

Junto con sus opciones, el comando ps se utiliza para ver todos los procesos que se ejecutan en un sistema Linux y la información útil sobre ellos. Sin ninguna opción, el comando solo proporciona un captura de pantalla de los procesos actuales. Esto se puede ver en la figura 5:

Fig 5: ps command output Fig. 5: salida del comando ps

Al usar la opción e, también se muestran todos los nombres de proceso. La captura de pantalla de la figura 6 muestra una parte de la salida de este comando:

Fig 6: ps -e command output Fig. 6: salida del comando ps -e

Para obtener más datos en la sintaxis BSD, se pueden utilizar las opciones aux de la siguiente manera:

ps aux

Este comando proporcionará la siguiente información: el porcentaje de CPU y memoria utilizado por un proceso, el comando empleado para ejecutar ese proceso, y durante cuánto tiempo se ha estado ejecutando.

Número de hilos por proceso usando proc

La información relacionada con cada proceso se almacena en su propio archivo en el directorio /proc. Con el identificador de proceso, puedes leer el archivo de estado del número de hilos que ha creado ese proceso concreto.

En la figura 7, el proceso con PID 42 ha creado 1 hilo. Este es el comando para obtener el recuento de hilos de un proceso:

cat /proc/<pid>/status
Fig 7: Number of threads per process using /proc Fig 7: número de hilos por proceso usando /proc

El archivo de estado proporciona mucha más información sobre un proceso que el número de hilos. Para encontrar el número de hilos de un proceso, existe otro método que utiliza el mismo directorio /proc.

Así como cada proceso tiene un directorio creado bajo su PID, cada hilo tiene un directorio creado bajo su ID de hilo. Esto se encuentra en el directorio /proc/<pid>/task. El número total de directorios en el directorio de tareas es el número de hilos creados para un proceso.

Esto se puede lograr canalizando la salida del comando ls a wc para contar el número de directorios, tal como se muestra a continuación:

ls /proc/<pid>/task | wc -l

La figura 8 muestra la salida del comando para el mismo proceso que se muestra en la figura 7:

Fig 8: Number of threads per process using /task Fig 8: número de hilos por proceso usando /task

Número de hilos por proceso usando ps

El comando ps ayuda a obtener información sobre los hilos de un proceso. Con la capacidad de mostrar la información solo para un PID dado, es más fácil obtener el recuento para un proceso individual.

Las opciones son las siguientes:

  • h: sin cabeceras. Esto es complicado cuando el comando ps se utiliza en el modo BSD. Sin embargo, no se mostrarán las cabeceras al usar esta opción de forma predeterminada.
  • H: modo de hilo. Esto mostrará información sobre los hilos.
  • p: filtrar por PID. Esta opción toma un PID como argumento para filtrar los procesos por el PID proporcionado.

Como antes, la salida de este comando se canaliza al comando wc para contar el número de líneas y obtener el recuento de hilos. El comando completo es el siguiente:

ps hH p <PID> | wc -l

Los tres métodos proporcionan sistemáticamente los mismos resultados.

Was this article helpful?
Supervise su entorno Linux

Verifique el estado y la disponibilidad de sus servidores Linux para obtener un rendimiento óptimo con la herramienta de monitoreo de Linux de Site24x7.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 "Learn" portal. Get paid for your writing.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 “Learn” portal. Get paid for your writing.

Apply Now
Write For Us