Verifique el estado y la disponibilidad de sus servidores Linux para obtener un rendimiento óptimo con la herramienta de monitoreo de Linux de Site24x7.
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.
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:
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
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:
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.
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: tamaño de pilaPodemos cambiar este tamaño de pila usando el mismo comando ulimit
:
ulimit -s 8192
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.
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:
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:
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.
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
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: número de hilos por proceso usando /taskps
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:
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.
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