Ejecutando Linux tengo algunos procesos que tienden a fallar ocasionalmente (servidores de juegos), que terminan usando 100% de CPU.
Estoy buscando un programa o script para verificar el uso de CPU de una lista de procesos por nombre y si están al 100% por más de X tiempo, digamos 30 segundos, mátenlos. Intenté ps-watcher pero no pude determinar cómo lograr esto.
Simplemente matar el proceso al 100% de uso no funcionará, ya que lo golpeará durante breves períodos durante el funcionamiento normal.
También encontré este script que parece hacer lo que quiero, sin embargo, está limitado a un proceso: enlace
¡Cualquier ayuda es muy apreciada!
Respuestas:
Prueba monit .
Puede usar una configuración como esta para realizar su tarea:
Los detalles sobre esta configuración se pueden encontrar en la documentación de monit .
fuente
start program
ystop program
son solo para el caso cuandomonit
necesita reiniciar su proceso. Todavía puede iniciarlo con su script de inicio normal.monit
también puede verificar si el programa ya se está ejecutando (por ejemplo, por su archivo PID o nombre del proceso).Esto era lo que estaba buscando, y lo he estado usando durante algún tiempo (ligeramente alterado). Últimamente, he puesto un error en mi trabajo pero necesito mantener la aplicación (servidor del juego) ejecutándose.
Había citado la parte donde se mata el PID superior, ya que estaba matando al PID incorrecto.
Aquí está mi último borrador de su script, hasta ahora, encuentra la sobrecarga más alta y efectivamente la mata (también me envía un correo electrónico con la información cada vez que hace algo);
Este pequeño script ha sido extremadamente útil, si no te gusta matar ningún proceso, solo el correo electrónico te ayudará a mantenerte informado.
fuente
TOPPROCESS
está desactivada. No se ordenará por valor real, sino que ordenará las entradas de forma alfanumérica (p. Ej., El 6% tendrá prioridad sobre el 12%). Una alternativa mejor podría ser el siguiente comando:top -b -n 1 | sed 1,6d | sed -n 2p
A continuación se muestra un script BASH de muestra que puede ayudarlo a obtener algunas sugerencias para sus propias necesidades.
Tenga en cuenta que el valor de su $ CPU_THRESHOLD debe depender de la cantidad de núcleos (CPU) que tenga en su sistema. Se puede encontrar una explicación detallada sobre este tema en http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages .
Puede llamar a su script desde dentro de / etc / inittab o un cronjob por cada número de minutos que prefiera. Tenga en cuenta también que el script de ejemplo eliminará el proceso superior si $ CPU_LOAD es mayor que $ CPU_THRESHOLD.
fuente