Commande pour afficher l'utilisation de la mémoire, l'utilisation du disque et la charge du processeur

16

Je souhaite afficher l'utilisation de la mémoire, l'utilisation du disque et la charge du processeur dans le format suivant:

Memory Usage: 33/512MB (6%)    
Disk usage: 4.2/20GB (23%) 
CPU Load: 0.01

Comment je fais ça?

Prem
la source
Cela ressemble beaucoup aux devoirs. Récupérez les données dont vous avez besoin dans / proc lui-même ou dans d'autres commandes, puis formatez-les avec awk, perl ou simplement bash.
mikebabcock
Bienvenue sur Unix et Linux Stack Exchange! Veuillez toujours inclure votre système d'exploitation. Les solutions dépendent très souvent du système d'exploitation utilisé. Utilisez-vous Unix, Linux, BSD, OSX, autre chose? Quelle version?
terdon
Merci les gars pour votre aide. Cependant, j'ai obtenu ma réponse ici stackoverflow.com/questions/33774260/…
Mohsin Inayat Khan

Réponses:

33

Essayez ceci, cela fonctionne sur mon système Debian. Les détails peuvent varier en fonction de la mise en œuvre de ces outils que votre système d'exploitation utilise:

#!/bin/sh
free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}' 

Si vous enregistrez ce qui précède en tant que script et l'exécutez, vous obtiendrez (exemple de mon système):

$ ./foo.sh 
Memory Usage: 4986/7994MB (62.37%)
Disk Usage: 23/68GB (35%)
CPU Load: 0.78

Notez que le script ci-dessus donne l'utilisation du disque pour la /partition. Vous n'avez pas précisé ce que vous vouliez donc je suppose que c'est ce que vous recherchez.

terdon
la source
1
J'ai essayé avec seulement awk github.com/rahulinux/scripts/blob/master/sys_info.sh
Rahul Patil
@RahulPatil a l'air bien, pourquoi ne le postez-vous pas?
terdon
3
parce que c'est juste vos ans copiés. : D
Rahul Patil
1
la ligne free -m me donne une erreur, le pourcentage n'a pas été correctement échappé. Voici comment cela devrait être:free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
Simon
1
@ user1735921 Veuillez poser une question . Mais d'abord, google comment stocker la sortie d'une commande dans une variable, c'est trivial. Ensuite, expliquez ce que vous souhaitez stocker et ce que vous souhaitez tester dans la question.
terdon
5

Vérifiez au sommet .

Lisez ceci, https://lwn.net/Articles/387202/

Voir, entrez la description de l'image ici

Vous pouvez voir la charge de disque / mémoire / cpu par les applications:

entrez la description de l'image ici

Par exemple, l'utilisation du disque:

entrez la description de l'image ici

au sommet des statistiques collectées dans le répertoire /var/log/atop/dans des fichiers au format binaire par jour. Vous pouvez lire une page de manuel, il doit y avoir un moyen d'extraire des informations utiles.

user2496
la source
2

Il n'y a pas de commande pour afficher exactement dans votre format particulier, mais ce qui suit fournit certaines des valeurs de base, sur lesquelles on pourrait construire un script, comme alternative, il est également possible de lire les valeurs de / proc et / sys.

free - Rapide vue d'ensemble

vmstat 1 affiche les statistiques d'E / S des performances du système

top dynamique

htop similaire au haut

X Tian
la source
1
Ajoutez mon préféré, iostat.
mikebabcock
0

Je pense que vous avez besoin de l'aide de Nagios, car tous ces plugins / srcipts pour Nagios sont déjà créés et vous pouvez télécharger et tester sans installer Nagios.

klerk
la source
0

Si vous utilisez Solaris, vérifiez ceci: showcpucount

Cela vous donnera une idée de la procédure à suivre pour écrire votre code.

vikkp
la source
Le blog n'existe plus.
Jay Elston
0

Voici mon code pour obtenir l'utilisation du CPU et de la RAM:

### 1. get total average CPU usage for the past minute
avg_cpu_use=$(uptime)
# a. split response
IFS=',' read -ra avg_cpu_use_arr <<< "$avg_cpu_use"
# b. find cpu usage
avg_cpu_use=""
for i in "${avg_cpu_use_arr[@]}"; do :
    if [[ $i == *"load average"* ]]; then
        avg_cpu_use=$i
        break       
    fi
done
# c. create response
avg_cpu_use=$(echo ${avg_cpu_use:16})   # Remove "  load average: "
if [[ -z "${avg_cpu_use// }" ]]; then
    avg_cpu_use="CPU: N/A%%"
    exit -1
else
    avg_cpu_use="CPU: ${avg_cpu_use}%%"
fi

### 2. get RAM usage
ram_use=$(free -m)
# a. split response by new lines
IFS=$'\n' read -rd '' -a ram_use_arr <<< "$ram_use"
# b. remove extra spaces
ram_use="${ram_use_arr[1]}"
ram_use=$(echo "$ram_use" | tr -s " ")
# c. split response by spaces
IFS=' ' read -ra ram_use_arr <<< "$ram_use"
# d. get variables
total_ram="${ram_use_arr[1]}"
ram_use="${ram_use_arr[2]}"
# e. create response
ram_use="RAM: ${ram_use}/${total_ram} MB"

echo $avg_cpu_use
echo $ram_use
xinthose
la source
-2

Vous devriez pouvoir afficher l'utilisation de la mémoire, l'utilisation du disque et la charge du processeur en utilisant:

(ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2)
Abhijeet Petkar
la source