Inhaltsverzeichnis
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
NIC
NIC's mit IP's anzeigen:
# ip aadr
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))
