Befehl zum Anzeigen von Speicherauslastung, Festplattenauslastung und CPU-Auslastung

15

Ich möchte die Speicherauslastung, die Festplattenauslastung und die CPU-Auslastung im folgenden Format anzeigen:

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

Wie mache ich das?

Prem
quelle
Sieht nach Hausaufgaben aus. Holen Sie sich die benötigten Daten aus / proc selbst oder aus anderen Befehlen und formatieren Sie sie mit awk, perl oder einfach bash.
Mikebabcock
Willkommen bei Unix & Linux Stack Exchange! Bitte geben Sie immer Ihr Betriebssystem an. Lösungen hängen sehr oft vom verwendeten Betriebssystem ab. Verwenden Sie Unix, Linux, BSD, OSX, etwas anderes? Welche Version?
Terdon
Vielen Dank für Ihre Hilfe. Allerdings habe ich hier meine Antwort erhalten stackoverflow.com/questions/33774260/…
Mohsin Inayat Khan

Antworten:

33

Versuchen Sie dies, es funktioniert auf meinem Debian-System. Die Details können abhängig von der Implementierung dieser Tools, die Ihr Betriebssystem verwendet, variieren:

#!/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)}' 

Wenn Sie das obige Skript speichern und ausführen, erhalten Sie (Beispiel aus meinem System):

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

Beachten Sie, dass das obige Skript die Festplattennutzung für die /Partition angibt. Sie haben nicht angegeben, was Sie wollten, und ich vermute, dass Sie danach suchen.

terdon
quelle
1
Ich habe es nur mit awk github.com/rahulinux/scripts/blob/master/sys_info.sh
Rahul Patil
@ RahulPatil sieht gut aus, warum postest du es nicht?
terdon
3
weil es nur deine kopierte ans ist. : D
Rahul Patil
1
Die Zeile free -m gibt einen Fehler aus, der Prozentsatz wurde nicht richtig maskiert. so sollte es sein:free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
simon
1
@ user1735921 Bitte stellen Sie eine Frage . Aber zuerst google, wie man die Ausgabe eines Befehls in einer Variablen speichert, das ist trivial. Erklären Sie dann, was Sie speichern und was Sie in der Frage testen möchten.
Terdon
5

Überprüfen Sie oben .

Lesen Sie diese, https://lwn.net/Articles/387202/

Sehen, Bildbeschreibung hier eingeben

Sie können die Auslastung der Festplatte / des Speichers / der CPU anhand der Apps sehen:

Bildbeschreibung hier eingeben

Zum Beispiel Datenträgerverwendung:

Bildbeschreibung hier eingeben

Oben erfasste Statistiken im Verzeichnis /var/log/atop/in binär formatierten Dateien pro Tag. Sie könnten eine Manpage lesen, es muss eine Möglichkeit geben, nützliche Informationen zu extrahieren.

user2496
quelle
2

Es gibt keinen Befehl, um genau in Ihrem speziellen Format anzuzeigen, aber der folgende gibt einige der Basiswerte an, um die man ein Skript erstellen könnte. Alternativ ist es auch möglich, Werte aus / proc und / sys zu lesen.

free - Schneller Überblick

vmstat 1 Zeigt die I / O-Statistiken zur Systemleistung an

top dynamisch

htop ähnlich wie oben

X Tian
quelle
1
Werfen Sie in meinem persönlichen Favoriten, iostat.
Mikebabcock
0

Ich denke, Sie brauchen Nagios-Hilfe, denn all diese Plugins / Skripte für Nagios sind bereits erstellt und Sie können sie ohne Nagios-Installation herunterladen und testen.

klerk
quelle
0

Wenn Sie Solaris verwenden, lesen Sie Folgendes : showcpucount

Auf diese Weise erhalten Sie eine Vorstellung davon, wie Sie Ihren Code schreiben.

vikkp
quelle
Blog existiert nicht mehr.
Jay Elston
0

Hier ist mein Code zum Abrufen der CPU- und RAM-Auslastung:

### 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
quelle
-2

Sie sollten in der Lage sein, die Speicherauslastung, die Festplattenauslastung und die CPU-Auslastung anzuzeigen, indem Sie Folgendes verwenden:

(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
quelle