[Guida] Script Bash per scovare i processi ad elevato consumo su Linux
In questa guida verranno illustrati i passaggi per utilizzare due script utili ad identificare per quanto tempo i processi con consumo elevato di CPU e RAMrestano in esecuzione sulla propria distribuzione GNU/Linux. Inoltre, gli script mostreranno l’ID del processo, il proprietario, il nome e la durata.
Script Bash: processi attivi e consumo elevato della CPU su Linux
Per identificare quali sono i processi con consumo elevato si ricorre al comando ps all’interno dello script. Questo script aiuta ad identificare da quanto tempo i processi ad alto consumo di CPU sono in esecuzione su Linux. Per procedere è necessario creare un file vuoto nella cartella “/opt/scripts” rinominandolo “long-running-cpu-proc.sh”.
Si consiglia di aprire il proprio gestore dei file con sudo (da terminale) procedendo con la creazione della cartella e del file vuoto. Copiare e incollare nel file vuoto il contenuto qui riportato e salvare.
# vi /opt/scripts/long-running-cpu-proc.sh #!/bin/bash ps -eo pid,user,ppid,%mem,%cpu,cmd --sort=-%cpu | head | tail -n +2 | awk '{print $1}' > /tmp/long-running-processes.txt echo "--------------------------------------------------" echo "UName PID CMD Process_Running_Time" echo "--------------------------------------------------" for userid in `cat /tmp/long-running-processes.txt` do username=$(ps -u -p $userid | tail -1 | awk '{print $1}') pruntime=$(ps -p $userid -o etime | tail -1) ocmd=$(ps -p $userid | tail -1 | awk '{print $4}') echo "$username $userid $ocmd $pruntime" done | column -t echo "--------------------------------------------------"
Autorizzare il file come eseguibile con il seguente comando:
# chmod +x /opt/scripts/long-running-cpu-proc.sh
Infine, digitare nel terminale il comando:
sh /opt/scripts/long-running-cpu-proc.sh
Verrà riportato un output con i processi attivi e da quanto tempo sono in esecuzione.
Script bash: processi attivi e consumo elevato della RAM
Nel caso della RAM il procedimento è il medesimo, l’unica differenza sta nel contenuto del file.
# sh /opt/scripts/long-running-memory-proc.sh #!/bin/bash ps -eo pid,user,ppid,%mem,%cpu,cmd --sort=-%mem | head | tail -n +2 | awk '{print $1}' > /tmp/long-running-processes-1.txt echo "--------------------------------------------------" echo "UName PID CMD Process_Running_Time" echo "--------------------------------------------------" for userid in `cat /tmp/long-running-processes-1.txt` do username=$(ps -u -p $userid | tail -1 | awk '{print $1}') pruntime=$(ps -p $userid -o etime | tail -1) ocmd=$(ps -p $userid | tail -1 | awk '{print $4}') echo "$username $userid $ocmd $pruntime" done | column -t echo "--------------------------------------------------"
Una volta generato il file è sufficiente ripetere la stessa procedura. L’output, in questo caso, mostrerà i processi che stanno richiedendo un uso elevato di memoria RAM.
Questo metodo dovrebbe funzionare correttamente su qualsiasi distribuzione GNU/Linux. Il risultato sarà simile al seguente: