Gestión de la lista de procesos y terminación automática de procesos

Gestión de la lista de procesos y terminación automática de procesos

A medida que continúa creciendo el uso/maximización óptimo, se vuelve cada vez más importante administrar bien los procesos. Un aspecto de esto es la terminación del proceso automático. Cuando un proceso se ha vuelto deshonesto y consume demasiados recursos, se puede terminar automáticamente.

Esto es especialmente adecuado para servidores que tienen muchos procesos temporales o desechables. También es muy adecuado para los servidores de prueba que están ejecutando muchas pruebas de prueba y donde tales pruebas de prueba demuestran ser inestables o hacen que el software bajo pruebas se comporte de manera errática (por ejemplo, utilizando demasiada memoria)

En este tutorial aprenderás:

  • Cómo administrar los procesos de una manera automatizada
  • Qué recursos puede considerar y por qué
  • Código de ejemplo que muestra cómo la terminación automática del proceso puede funcionar para los problemas de acero de memoria
Gestión de la lista de procesos y terminación automática de procesos

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución de Linux
Software Línea de comando bash, sistema basado en Linux
Otro Cualquier utilidad que no esté incluida en el shell bash de forma predeterminada se puede instalar utilizando sudo apt-get instalación de utilidad de utilidad (o yum instalación para sistemas basados ​​en redhat)
Convenciones # - requiere que los comandos de Linux se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
$-Requiere que los comandos de Linux se ejecuten como un usuario regular no privilegiado

Demasiada memoria! O mejor, muy poca memoria!

Hay dos recursos principales que probablemente siempre desee vigilar, dependiendo del software que se utilice en otra parte del servidor, y ese es el uso de la memoria y el espacio en el disco. El uso de la CPU también puede entrar en escena, pero es algo diferente de los demás. La razón es que: cuando te quedas sin espacio en disco o fuera del espacio de memoria, su servidor comenzará a reproducirse.

Puede tener un comportamiento indefinido debido a que se queda sin espacio en el disco, y si se queda sin memoria, el asesino OOM (fuera del motor de proceso automático de la memoria) puede entrar y matar algunos procesos, y así sucesivamente.

Por otro lado, con la CPU, incluso si el software que se ejecuta en otra parte del servidor maximiza la CPU, su servidor seguirá funcionando. Si se trata de un programa real de acero de CPU, puede ser prohibitivamente lento, pero en la mayoría de los casos aún podrá escribir al menos algunos comandos.

Este artículo se centrará en la gestión de procesos de acero de memoria: terminación automática de procesos que consumen demasiada memoria. Primero veamos cómo podemos monitorear el uso del proceso de memoria:

$ PS -EO PID, PMEM --sort -rss | Head -n10 PID %MEM 406677 19.5 373013 2.1 406515 2.0 406421 1.9 2254 1.8 406654 1.8 406554 1.7 406643 0.9 16622 0.7 


Aquí solicitamos PD para producir una lista de los 10 pid principales. Indicamos que queremos ver todos los procesos (-mi), y para cada proceso queremos ver la identificación del proceso (-o pid), y el porcentaje de memoria que consume (-o PMEM), o en total (con opciones combinadas: -EO PID, PMEM).

A continuación, solicitamos que la lista fuera presorciada para nosotros (--clasificar) y establezca la opción RSS (-RSS) como la especificación de formato largo. Luego capturamos los 10 mejores resultados usando la cabeza -n10. Si queríamos ver qué procesos están utilizando la memoria, también podemos agregar ,comunicación hacia pid, pmem lista, o simplemente usamos PS -EF | pid donde PID es el número como se enumera en la primera columna del PD Salida para ver los detalles completos para un proceso.

Ahora automaticemos esto de tal manera que los procesos que usan más del 10% de la memoria se terminan automáticamente.

Advertencia: no ejecute esto en ninguna computadora sin comprender completamente lo que hará y cómo funciona esto. La información aquí se proporciona como es, sin garantías de ningún tipo. Puede cancelar algunos procesos que no deseaba, o no debería ser, terminado.

# PS -EO PMEM, PID --sort -rss | Grep '^[\ t]*[1-9] [0-9] \.'| Awk 'imprimir $ 2' | xargs -i  Kill -9  

En primer lugar, vamos a ejecutar esto como root, para asegurarnos de tener suficientes privilegios para matar cualquier proceso relevante. Tenga en cuenta que intercambiamos el PMEM (porcentaje de memoria) y pid (ID de proceso) alrededor. Esto hace que sea un poco más fácil usar una expresión regular grep. Nuestra expresión regular de GREP funciona así: primero, busque un espacio () o ([…]) una pestaña (\ t), cero o más (*) tiempos.

A continuación, busque el número 1 a 9, al menos una vez (al menos una vez es la frecuencia predeterminada, por lo que no hay símbolo similar a * se usa!). Esto es para capturar cualquier número de 10 (comienza con 1) a 99 (comienza con 9). A continuación buscamos otro 0 a 9, Entonces, en total, estamos buscando/engañando los números 10 a 99. Seguimos esto por un punto literal (\., hacer no usar . Aquí, como un solo punto sin prefijo de barra insegura cualquier personaje en lugar de un punto literal!) para asegurarnos de que estemos capturando antes del punto decimal.

Luego tomamos solo la salida de la segunda columna (Imprimir $ 2, con $ 2 siendo la segunda columna, $ 1 el primero etc.) mediante el uso asombrar. Finalmente, pasamos esto a Xargs Y escribe matar -9 en un formato limpio y fácil de entender. Podríamos haber escrito esto usando una sintaxis de taquigrafía, pero esto es agradable, limpio y claro. El -I Indica lo que utilizaremos como nuestra cadena de reemplazo (reemplazando cualquier ocurrencia de lo mismo dentro del comando con cualquier entrada Xargs ha recibido de la tubería), en este caso . También recomiendo En general, como una cadena de intercambio/reemplazar seguro.

Si desea obtener más información sobre Xargs, Consulte nuestros XARGS para principiantes con ejemplos y Xargs de múltiples hilos con artículos de ejemplos.

El resultado de ejecutar el comando es que cualquier proceso que use más del 10% de la memoria se terminará inmediatamente con un fuerte matar -9 dominio. Si desea automatizar lo mismo, podría poner esto dentro de un mientras que es cierto; hacer hecho bucle, simplemente reemplazando el con el comando anterior, o puede agregar esto a su crontab u otros scripts de monitoreo preexistentes.



Tenga cuidado con el uso de estos comandos, no está exento de riesgo. Esforzarse por comprender lo que está haciendo en todo momento! También puede que le guste introducir un 1 minuto dormir Para evitar martillar el servidor con comandos:

# mientras cierto; hacer PS -EO PMEM, PID --sort -rss | Grep '^[\ t]*[1-9] [0-9] \.'| Awk 'imprimir $ 2' | xargs -i  kill -9 ; dormir 60; hecho 

De esta manera, estamos monitoreando todos los procesos en la memoria de manera regular y/o continua y terminando cualquier procesamiento que esté comenzando a ir de pícaro, usar mucha memoria, etc.

Conclusión

En este artículo, consideramos administrar procesos de manera automatizada mediante el uso de formateados personalizados PD salida, así como el Xargs y matar comandos. También exploramos qué recursos monitorear y por qué. Finalmente demostramos cómo la terminación automática del proceso puede funcionar para los problemas de acero de memoria en el código. Disfrutar!

Tutoriales de Linux relacionados:

  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mastering Bash Script Loops
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Cosas para instalar en Ubuntu 20.04
  • Los mejores juegos de terminal en Linux
  • Comparación de Linux Apache Prefork vs Worker MPMS
  • Guía de solución de problemas GNU/Linux General para principiantes
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..
  • Gestión de procesos de fondo bash
  • Cómo propagar una señal a los procesos infantiles de una fiesta ..