====== Systemüberprüfung ======
===== wichtige Befehle =====
==== Festplatten ====
df -k # Platz in kByte
df -h # Platz in gröstmöglicher Einheit
vmstat 1 # zeigt die Systemaktivitäten im Sekundentakt
# si - Swap in (in den Swap schreiben)
# so - Swap out (aus dem Swap lesen)
# bi - Block in (auf Platte schreiben)
# bo - Block out (von Platte lesen)
vmstat -p /dev/cciss/c0d0p1 1 # Statistik der ersten Partition
vmstat -d 1 # detailierte Plattenstatistik
fdisk -l # (Nur als root!) ansprechbare Platten zeigen
ansprechbare Platten zeigen:
# ls -1 /sys/block/ | egrep -v 'loop|ram'
ansprechbare Platten mit Partitionen zeigen:
# ls -1 /sys/class/block/ | egrep -v 'loop|ram'
# cat /sys/class/block/cciss\!c0d0/uevent
MAJOR=104
MINOR=0
DEVNAME=cciss/c0d0
DEVTYPE=disk
# cat /sys/class/block/cciss\!c0d0p1/uevent
MAJOR=104
MINOR=1
DEVNAME=cciss/c0d0p1
DEVTYPE=partition
Wenn ein LVM eingerichtet ist, hat man es schwer zu ermitteln
welches dm auf welcher physikalischen Platte liegt...
Dieses Kommando zeigt welches virtuelle Volumen auf welcher
physikalischen Platte liegt:
# ls -l /sys/block/dm-*/slaves/sd*
==== File Handler ====
Will man ein Verzeichnis umount(en) und bekommt die Meldung
"device is busy.", dann kann man so die Prozesse finden, die
noch auf das Verzeichnis zugreifen.
zeigt offene Dateien in dem Verzeichnis (Linux/GNU):
# fuser -vm /home/
zeigt offene Dateien in dem Verzeichnis (FreeBSD/BSD):
# fuser -c /home/
==== CPU ====
Prozessorinformationen:
# cat /proc/cpuinfo
# top
ps -ef | less # UNIX-Style (Standard-Syntax)
ps aux | less # BSD-Style
ps wwwaux | less # BSD-Style (längere Kommandozeile)
ps axo user,pid,ppid,pcpu,pmem,vsz,rss,tty,stat,start,time,args | less
ps wwaxo user,pid,ppid,pcpu,pmem,vsz,rss,tty,stat,start,time,args | less
vmstat 1 # zeigt die Systemaktivitäten im Sekundentakt
# us - User (User-Space-Interupts)
# sy - System (System-Interupts)
# id - Idle (nix zu tun)
# wa - Waiting (warte auf Daten aus einem Nadelöhr z.B. Platte oder Netz)
==== RAM ====
# top # im Kopf steht die Speicherauslastung
# VIRT - virtueller Speicher (RAM+Swap)
# RES - resident im RAM (eigentlicher RAM-Verbrauch)
# Swap = VIRT - RES (unbedingt auf die Einheiten achten)
# SHR - shared Speicher (meist verwendet von gemeinsam genutzte Libs)
# free
Speicherinformationen:
# cat /proc/meminfo
zeigt in der letzten Zeile den GENAUEN Speicherverbrauch des Prozesses unter "writeable/private:" an:
# pmap -d [PID]
[[http://www.tecmint.com/find-processes-by-memory-usage-top-batch-mode/]]
# top -b -o +%MEM | head -n 22
top - 11:51:41 up 18 days, 23:41, 4 users, load average: 2,13, 1,09, 0,82
Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3,0 us, 1,7 sy, 0,0 ni, 80,2 id, 14,9 wa, 0,0 hi, 0,1 si, 0,0 st
KiB Mem: 16432776 total, 16136676 used, 296100 free, 251656 buffers
KiB Swap: 974844 total, 71124 used, 903720 free. 8957284 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32496 mysql 20 0 11,601g 6,158g 18644 S 0,0 39,3 112:36.34 mysqld
12528 root 20 0 113564 33000 2224 S 0,0 0,2 0:41.05 puppet
1010 syslog 20 0 256052 9552 0 S 0,0 0,1 0:41.84 rsyslogd
13914 root 20 0 141804 6624 2280 S 0,0 0,0 28:21.92 mmm_agentd
7924 root 20 0 105664 6480 5472 S 0,0 0,0 0:00.03 sshd
8068 root 20 0 24140 5820 3764 S 0,0 0,0 0:01.17 bash
7968 fritz 20 0 24124 5488 3464 S 0,0 0,0 0:00.11 bash
8067 root 20 0 66468 4272 3800 S 0,0 0,0 0:00.00 sudo
7967 fritz 20 0 105664 3836 2828 S 0,0 0,0 0:00.76 sshd
7039 root 20 0 16328 3820 2568 S 0,0 0,0 0:17.34 watch
11993 root 20 0 24304 3640 2448 S 0,0 0,0 0:01.12 bash
16350 root 20 0 26332 3144 2716 R 6,3 0,0 0:00.01 top
1 root 20 0 33484 2632 1732 S 0,0 0,0 0:22.41 init
5566 root 20 0 16064 2472 1616 S 0,0 0,0 12:51.74 watch
16351 root 20 0 8732 2180 2076 S 0,0 0,0 0:00.00 head
=== auf FreeBSD ===
# top -b -o size | head -n 22
last pid: 51378; load averages: 0.13, 0.10, 0.11 up 0+17:53:36 20:06:33
68 processes: 1 running, 67 sleeping
CPU: 0.0% user, 0.0% nice, 3.2% system, 0.1% interrupt, 96.6% idle
Mem: 2861M Active, 10G Inact, 12G Wired, 1337M Buf, 37G Free
ARC: 6738M Total, 2267M MFU, 3145M MRU, 1044K Anon, 35M Header, 1283M Other
4291M Compressed, 6701M Uncompressed, 1.56:1 Ratio
Swap: 7949M Total, 7949M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
47293 root 12 20 0 16G 1334M kqread 6 396:13 0.10% bhyve
56527 squid 1 20 0 1995M 282M kqread 4 0:11 0.00% squid
48263 root 1 34 0 183M 7328K kqread 1 0:00 0.00% cupsd
44830 root 1 20 0 175M 148M select 3 0:29 0.00% smbd
49207 root 1 20 0 175M 147M select 4 0:00 0.00% smbd
38845 root 21 52 0 140M 52M uwait 3 1:58 0.00% ts3server
46816 root 2 20 0 136M 105M select 0 0:00 0.00% smbd
47692 root 1 20 0 132M 105M select 5 0:00 0.00% smbd
36392 murmur 1 52 0 71M 21M select 6 0:00 0.00% murmurd
43004 www 1 20 0 70M 38M kqread 1 0:04 0.00% httpd
48037 www 1 20 0 70M 37M lockf 8 0:05 0.00% httpd
43924 www 1 21 0 66M 35M lockf 10 0:05 0.00% httpd
47806 www 1 20 0 65M 34M lockf 6 0:04 0.00% httpd
# top -b -o res | head -n 22
last pid: 56238; load averages: 0.11, 0.10, 0.11 up 0+17:53:47 20:06:44
68 processes: 1 running, 67 sleeping
CPU: 0.0% user, 0.0% nice, 3.2% system, 0.1% interrupt, 96.6% idle
Mem: 2861M Active, 10G Inact, 12G Wired, 1337M Buf, 37G Free
ARC: 6738M Total, 2266M MFU, 3145M MRU, 788K Anon, 35M Header, 1283M Other
4291M Compressed, 6701M Uncompressed, 1.56:1 Ratio
Swap: 7949M Total, 7949M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
47293 root 12 20 0 16G 1334M kqread 8 396:13 0.10% bhyve
56527 squid 1 20 0 1995M 282M kqread 1 0:11 0.00% squid
44830 root 1 20 0 175M 148M select 3 0:29 0.00% smbd
49207 root 1 20 0 175M 147M select 4 0:00 0.00% smbd
47692 root 1 20 0 132M 105M select 5 0:00 0.00% smbd
46816 root 2 20 0 136M 105M select 0 0:00 0.00% smbd
38845 root 21 52 0 140M 52M uwait 3 1:58 0.00% ts3server
43004 www 1 20 0 70M 38M lockf 9 0:04 0.00% httpd
48037 www 1 20 0 70M 37M lockf 8 0:05 0.00% httpd
43924 www 1 21 0 66M 35M lockf 10 0:05 0.00% httpd
47806 www 1 20 0 65M 34M kqread 6 0:04 0.00% httpd
42752 www 1 20 0 64M 34M lockf 9 0:04 0.00% httpd
11115 www 1 20 0 64M 33M lockf 4 0:00 0.00% httpd
#!/bin/sh
# Beispiel für FreeBSD/macOS-nahe Erfassung
TOTAL=$(sysctl -n hw.memsize 2>/dev/null || sysctl -n hw.physmem)
PHYS=$(sysctl -n hw.physmem 2>/dev/null || echo "$TOTAL")
REAL=$(sysctl -n hw.realmem 2>/dev/null || echo "$PHYS")
PAGE_SIZE=$(sysctl -n hw.pagesize 2>/dev/null || echo 4096)
FREE_PAGES=$(sysctl -n vm.stats.vm.v_free_count 2>/dev/null || echo 0)
AVAILABLE=$((FREE_PAGES * PAGE_SIZE))
echo "
TOTAL: ${TOTAL}
PHYS: ${PHYS}
REAL: ${REAL}
AVAILABLE: ${AVAILABLE}
" | grep -Ev '^[[:space:]]*$' | awk '{a=$2; b="B"; if ($2 > 1024) {a=$2/1024; b="KiB"}; if ($2 > 1048576) {a=$2/1024^2; b="MiB"}; if ($2 > 1073741824) {a=$2/1024^3; b="GiB"}; printf "%s\t%s %s\n", $1,a,b}'
> /root/bin/RAM.sh
TOTAL: 63.7987 GiB
PHYS: 63.7987 GiB
REAL: 64 GiB
AVAILABLE: 2.50927 GiB
==== NIC ====
NIC's mit IP's anzeigen:
# ip a
zeigt alle aktiven NIC's:
ifconfig -a
ls -l /sys/class/net/eth0/ # zeigt alle ansprechbaren NICs
cat /sys/class/net/eth0/address # MAC-Adresse von eth0
ls -1 /sys/class/net/eth0/statistics/ # Dateien mit statistischen Infos
Netzwerkkollisionen:
cat /sys/class/net/eth0/statistics/collisions
Empfangsfehler:
cat /sys/class/net/eth0/statistics/rx_errors
Sendefehler:
cat /sys/class/net/eth0/statistics/tx_errors
empfangene CRC-Fehler:
cat /sys/class/net/eth0/statistics/rx_crc_errors
Dateien mit Error-Statistik-Infos:
ls -la /sys/class/net/eth0/statistics/*errors
Will man die Netzwerkauslastung ermitteln, ohne das man
eine Bandbreitensoftware zur verfühgung hat, kann man wie
folgt vorgehen.
empfangene Datenmenge in Byte/Sekunde:
# XB="$(cat /sys/class/net/eth0/statistics/rx_bytes)";sleep 1;echo "$(cat /sys/class/net/eth0/statistics/rx_bytes)-$XB"|bc -l
gesendete Datenmenge in Byte/Sekunde:
# XB="$(cat /sys/class/net/eth0/statistics/tx_bytes)";sleep 1;echo "$(cat /sys/class/net/eth0/statistics/tx_bytes)-$XB"|bc -l
===== Grundlegendes =====
Sollte ein System langsam sein, muss man als erstes ermitteln wo der Engpass
liegt. Als Engpass kommen fast immer nur vier Systemressourcen in Frage:
- Prozessor
- Speicher (bei zu wenig RAM wird auf die Festplatte -> Swap zugegriffen)
- Festplatte
- Netzwerk
**ACHTUNG!!!**
Die "load average"-Werte sagen in dieser Hinsicht **GARNICHTS!**
Die "load average" drückt nur aus, wie lange ein Prozess warten
muss bis er wieder CPU-Zeit bekommt, sie sagt aber nichts über
die CPU-Auslastung aus!!!
Ein hoher "load average"-Wert zeigt uns nur, dass EINE der vier
Systemressourcen die Systemleistung begrenzt.
Oft muss aber nicht das System selbst schuldig sein, denn oft
wartet ein Prozess nur auf Daten eines anderen Prozesses, der
auch auf einem anderen Rechner laufen kann.
Das treibt unter Umständen auch die "load average"-Werte hoch.
==== Prozessor ====
Ob die CPU am Anschlag läuft, sieht man am schnellsten mit "top".
# top
# vmstat 1
==== Speicher ====
Ob der RAM ausgeschöpft ist, kann man auf unterschiedlichen
Arten ermitteln
# free
# top
# cat /proc/meminfo
# vmstat 1
==== Festplatte ====
# vmstat 1
==== Netzwerk ====
Das Netzwerk als Engpass zu ermitteln geht fast immer nur über die
Ausschlussmethode. Denn nur wenn die Netzwerkbandbreite voll ausgeschöpft
ist, kann man definitiv sagen, dass es an zu wenig Netzwerkbandbreite liegt.
Meistens warten die Prozesse aber nur auf Antworten aus dem Netz, so das es
im System keinen ersichtlichen Engpass gibt!
Die aktuell genutzte Netzwerkbandbreite kann man wie folgt ermitteln.
letzte Sekunde im Durchschnitt (Byte/Sekunde):
# XB="$(cat /sys/class/net/eth0/statistics/rx_bytes)";sleep 1;echo "$(cat /sys/class/net/eth0/statistics/rx_bytes)-$XB"|bc -l
# XB="$(cat /sys/class/net/eth0/statistics/tx_bytes)";sleep 1;echo "$(cat /sys/class/net/eth0/statistics/tx_bytes)-$XB"|bc -l
letzte Minute im Durchschnitt (Byte/Minute):
# XB="$(cat /sys/class/net/eth0/statistics/rx_bytes)";sleep 60;echo "($(cat /sys/class/net/eth0/statistics/rx_bytes)-$XB)/60"|bc -l
# XB="$(cat /sys/class/net/eth0/statistics/tx_bytes)";sleep 60;echo "($(cat /sys/class/net/eth0/statistics/tx_bytes)-$XB)/60"|bc -l
===== FreeBSD 12 =====
==== RAM ====
leider zeigt die FreeBSD-Version von "top" nicht die gesammte RAM-Speichergröße an
# top
last pid: 11041; load averages: 6.45, 6.74, 6.86 up 0+03:43:13 16:30:35
87 processes: 2 running, 85 sleeping
CPU: 0.1% user, 76.5% nice, 12.9% system, 10.2% interrupt, 0.3% idle
Mem: 362M Active, 431M Inact, 12G Wired, 40K Buf, 2432M Free
...
hier steht nur:
* **Active:** RAM-Größe des aktiv genutzt wird
* **Inact:** RAM-Größe die inaktiv ist
* **Wired:** "verkabelte" RAM-Größe, einschließlich zwischengespeicherter Dateiseiten auf BIO-Ebene
* **Cache:** Datenmenge, die im RAM zwischengespeichert liegt, um die langsamen Festplattenzugriffe zu minimieren
* **Buf:** RAM-Größe die für den Festplatten-Cache auf BIO-Ebene verwendet wird
* **Free:** freie RAM-Größe
beim Booten wird die RAM-Größe einmal ausgegeben:
# fgrep memory /var/run/dmesg.boot
real memory = 17179869184 (16384 MB)
avail memory = 16096768000 (15351 MB)
__aus dem Kernel-Status kann man die RAM-Größe jeder Zeit auslesen:__
# sysctl hw | egrep 'hw.(phys|user|real)'
hw.physmem: 16595222528
hw.usermem: 4956823552
hw.realmem: 17179869184
# sysctl hw | awk '/hw[.](phys|user|real)/{print $1"\t"$2,"Byte,\t",$2/1024,"MB,\t",$2/1024^2,"GB"}'
hw.physmem: 16595222528 Byte, 16206272 MB, 15826,4 GB
hw.usermem: 3710742528 Byte, 3623772 MB, 3538,84 GB
hw.realmem: 17179869184 Byte, 16777216 MB, 16384 GB
angelehnt an das Linux-Werkzeug "free", hier auch mit farbiger Ausgabe:
# pkg install sysutils/freecolor
# freecolor
Physical : [######.............................] 18% (2870916/15781376)
Swap : [###################################] 100% (16777216/16777216)
# freecolor -tom
total used free shared buffers cached
Mem: 15411 12419 2991 0 0 0
Swap: 16384 0 16384
Total: 31795 = ( 12419 (used) + 19375 (free))