====== 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))