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 un computador deja de responder, a menudo es porque un proceso está monopolizando los recursos del sistema. Una solución fácil a este problema es terminar el proceso que consume tantos recursos. Pero antes de terminar un proceso, necesitamos entender qué es.
Un proceso es una instancia de un programa en ejecución, junto con todo lo que necesita para dicha ejecución. Al proceso se le asigna una parte de los recursos del sistema para que pueda cargar el contenido del archivo que lee —o los dispositivos de entrada/salida, junto con todo lo demás— en la memoria asignada. Luego utiliza los núcleos de CPU asignados para ejecutarse.
Sin embargo, algunos procesos se comportan de maneras inesperadas. Por ejemplo, un programa puede encontrar un error en su código y empezar a consumir memoria excesiva. Del mismo modo, los procesos pueden consumir el 100% de los núcleos de la CPU. Cuando esto sucede, el equipo deja de responder porque ese proceso no autorizado está ocupando todos los recursos del sistema.
“Terminar” ese proceso libera recursos para que el sistema pueda volver al estado normal. Se requiere un identificador único, que se asigna a cada proceso cuando se inicia, para terminar un proceso. Esto se denomina ID de proceso o PID. Todos los recursos asignados a los procesos se referencian con este número. Encontrar el PID es el primer paso para terminar el proceso y hacer que los recursos del sistema estén disponibles.
En este artículo, te enseñaremos cómo encontrar el PID para un proceso dado y luego terminarlo usando comandos simples.
top
es un comando popular para acceder a la utilización de recursos del sistema. El comando generará una tabla que incluye una lista en tiempo real de todos los procesos en ejecución, cada ID de proceso, el porcentaje de recursos que el proceso está utilizando y más. Puedes ver la interfaz de usuario del comando top en la siguiente figura.
Por defecto, los procesos se ordenan según el porcentaje de CPU que están utilizando en orden descendente. Por eso, el primer proceso que se ve es el que consume más CPU. En este ejemplo, podemos ver que el proceso Webkit está utilizando un poco más del 105% de la CPU. Esto se debe a que, cuando se tomó la captura de pantalla, el navegador web Safari se estaba ejecutando con algunas pestañas reproduciendo videos de varios formatos.
Además de monitorear la columna “%CPU”, también es importante vigilar “MEM”. Esta permite saber cuánta memoria o RAM está siendo utilizada por el proceso.
“%CPU” y “MEM” son dos de las columnas más importantes que debes monitorear en esta tabla.
Ahora que podemos identificar el proceso que está consumiendo más CPU o memoria usando el comando top
, veamos cómo podemos terminar dicho proceso.
En primer lugar, podemos obtener el ID del proceso que queremos terminar en la primera columna de la tabla que se muestra en la figura 1. Ten en cuenta que la lista se actualiza continuamente: cada tres segundos para Linux y cada segundo para macOS. En consecuencia, puede ser difícil identificar tanto el proceso como el PID en ese corto período de tiempo. Afortunadamente, hay otro comando para eso.
Una vez identificamos el proceso que queremos terminar, podemos usar el comando ps
para obtener el ID de proceso correspondiente. Si ejecutamos el comando ps en nuestro terminal, no vemos mucho en la salida. La siguiente captura de pantalla muestra que el comando ps en sí no da mucha información.
Al usar las tres opciones siguientes con el comando ps
, podemos obtener mucha más información:
Estas tres opciones mostrarán una lista de todos los procesos que se ejecutan en el sistema en un momento dado. Verás algo como la figura de abajo:
Fig. 3: salida del comando ps auxEn este ejemplo, hemos utilizado la opción adicional "| head" (man7.org/linux/man-pages/man1/head.1.html) para limitar la lista de salida a 10 elementos. Sin embargo, no es necesario. Desde la salida, podemos ver todos los procesos que se enumeran.
Ahora, supongamos que queremos terminar una instancia de Sublime Text que se está ejecutando. Para esto, primero tenemos que obtener el PID de Sublime Text. Usaremos el comando ps aux
para hacerlo y filtraremos la lista para mostrar solo las instancias de Sublime Text.
Filtraremos los datos usando otro comando popular llamado grep
. Podemos encadenar los comandos usando “pipe”, que está representado por el símbolo |. A continuación se muestra el comando completo:
ps aux | grep subl
subl
es el comando utilizado para ejecutar una instancia de Sublime Text. Por lo tanto, cuando ejecutamos este comando, ps
mostrará todas las instancias de Sublime Text en ejecución, similar a la captura de pantalla que se muestra en la figura 4.
Como podemos ver en la salida, actualmente hay tres instancias de Sublime Text en ejecución. El primer elemento de la lista es el comando ps
en sí mismo, así que lo ignoraremos. La segunda columna es el PID de los procesos.
Ahora finalmente podemos terminar los procesos para liberar recursos del sistema.
Como era de esperar, tenemos otro comando para terminar procesos y es bastante simple: kill
. Pasamos el PID del proceso que queremos terminar al comando kill
. De la figura 4 anterior, tenemos tres procesos que queremos terminar. Estos tienen los PID 28947, 28946 y 28940. De esta forma, el comando sería:
kill 28947 28946 28940
Podemos pasar varios PID a este sencillo comando kill
por lo que no tenemos que terminar cada proceso individualmente. Sin embargo, es importante tener en cuenta que los PID aquí están separados por espacios. Esto terminará las tres instancias en ejecución de Sublime Text, lo cual se puede verificar ejecutando el comando ps aux | grep subl de nuevo.
No siempre es motivo de preocupación, pero a veces terminar un proceso sin informar a todos los sistemas posteriores resultará en que más procesos no respondan. Para evitar tales situaciones, Linux proporciona una función llamada “Señales”.
Las señales se utilizan para indicar la ocurrencia de un evento a otros procesos. El comando kill
proporciona siete señales, que se muestran en la figura 5.
Como se puede ver en la captura de pantalla, estas son las señales más utilizadas. Al terminar un proceso, podemos pasar el identificador numérico de la señal como una opción al comando kill
. Pongamos un ejemplo. Si quisiéramos pasar la señal KILL al comando kill, cambiaríamos nuestro comando de la siguiente manera:
kill -9 28947 28946 28940
La salida del comando no es diferente al comando kill
sin opciones. La única diferencia es que la señal también es manejada por el sistema. Además de estas opciones comunes, hay otras opciones del comando kill con las que se puede experimentar.
Como habrás observado, no usamos el comando sudo
mientras terminamos instancias de Sublime Text. Esto se debe a que Sublime Text fue un proceso de usuario que iniciamos. Sin embargo, habrá casos en los que queramos terminar procesos iniciados por otros usuarios o el sistema.
el proceso de la base de datos no responde. En tales casos, necesitamos permisos elevados para terminar esos procesos. La única diferencia en el comando es agregar “sudo” antes del comando en sí, como se muestra a continuación:
sudo kill -9 28947 28946 28940
Se necesita la contraseña de superusuario para ejecutar el comando, así que asegúrate de tenerla a la mano. A menos que esté en la lista de “sudoers”, no podrás ejecutar el comando y terminar esos procesos sin la contraseña.
Pero debes tener cuidado al terminar procesos como superusuario. Terminar un proceso del sistema puede causar inestabilidad en el sistema, lo que requiere un reinicio que podría causar un tiempo de inactividad. Además, terminar los procesos de otros usuarios puede hacer que sus aplicaciones no funcionen correctamente.
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