SLAC 2008 Systemnahes Monitoring: Wie, wo, was? Stefan Semmelroggen Heinlein Professional Linux Support GmbH http://www.heinlein support.de
Agenda top der Klassiker Speichermanagement lsof strace iostat & iotop netstat weitere Goodies...
top der Klassiker
Load load average: Exponentiell geglätteter Wert der durchschnittlichen Anzahl von Prozessen in der run queue über einen Zeitraum von 1, 5 und 15 Minuten
Load Was ist eine hohe Load? Jedes System reagiert anders Abhängig von Aufgabe und Anzahl der CPU Kerne im System, kann eine Load von 0,5 schon als träge empfunden werden und eine Load von 12 normal sein Was bringt uns dann die Load? Kapazitätsplanung
CPU Zeit us: user mode Rechenzeit der Applikationen sy: kernel mode Rechenzeit des Kernels ni: nice nice Prozesse im user mode id: idle Däumchen drehen wa: wait I/O Warten auf die Fertigstellung von I/O hi, si: hardware & software interrupts st: steal time Gestohlene Zeit (XEN Hypervisor)
Top Spalten PR: priority Je höher, desto länger hat der Prozess gewartet NI: nice value Je niedriger, desto höher die Priorität (ungleich PR) VIRT: virtual image Gesamtgröße des benutzten Speichers (inkl. shared libraries, Datensegmente, swap,...) RES: resident size echter RAM Verbrauch SHR: shared mem gemeinsam genutzter Speicher (beispielsweise shared libraries)
free Speicherauslastung Ungenutzter Speicher ist verschwendeter Speicher nicht benötigter RAM wird für den Cache verwendet buffers/cached: gibt an, wieviele Bytes zum Cachen von Festplattenblöcken bzw. Dateien und Verzeichnissen verwendet wird buffers/cached wird bei Bedarf vom Kernel für Applikationen freigegeben ABER: ein System mit wenig Cache bremst das System
Speicherlimitierung auf 32 bit CPUs 32 bit CPUs können nur 4 GB RAM adressieren 2 32 =4294967296 CPUs mit PAE (ab Pentium Pro) haben 36 Bit für die Adressierung von RAM => die CPU kann 64 GB adressieren 32 bit Applikationen können aber NIE mehr als 4 GB adressieren In der Praxis i.d.r. nur 3 GB dazu später mehr.
Mehr als 1024 MB RAM bei Linux (32 bit) Low Memory und High Memory ZONE_DMA: 0 bis 16 MB ZONE_NORMAL: 16 bis 896 MB ZONE_HIGHMEN: 896 bis...
Low Memory und High Memory cat /proc/meminfo egrep '(Low High)' Alle Kernelstrukturen müssen im Low Memory Bereich liegen Der Kernel kann nur den Low Memory Bereich direkt ansprechen High Memory muß vor Benutzung im Low Memory Bereich eingeblendet werden => Overhead und Performanceverlust
Memory Split ab Kernel 2.6.13 Memory Split 3/1, 2/2 oder 1/3 (user/kernel) cat /proc/meminfo egrep '(Low High)' Applikationen können dann maximal 3, 2 bzw. 1 GB groß werden
Low Memory und High Memory Bei Systemem mit viel RAM kann der Low Memory Bereich voll sein, ohne dass der High Memory Bereich voll ausgeschöpft werden kann 64 bit Systeme haben diese Trennung nicht. Es gibt nur Low Memory => Bei mehr als 1 GB RAM; spätestens aber ab 4 GB RAM immer 64 bit CPUs verwenden
pmap Speichersünder aufspüren Speicheradresse Größe Zugriffsrechte Ressource Die Datensegmente (rw ) gehören dem Prozess. Der Rest kann mit anderen Prozessen geteilt werden Jedes Modul braucht privaten Speicher Unbedingt alle Dienste auf ein Minimum abspecken Selbstkompilierte Dienste können bei großen Systemen Ressourcen sparen
slabtop Anzeige der Caches Der Cache ist in sogenannte slabs organisiert slabtop zeigt die Größe und Auslastung der einzelnen slabs an
lsof list open files lsof -p PID zeigt alle benutzten Ressourcen des Prozesses lsof /datei zeigt alle Programme an, die die Datei benutzen lsof -i zeigt alle bnenutzen IP Sockets an
Beispielausgabe von lsof
lsof FD (File Descriptor) cwd current working directory mem memory mapped file rtd root directory txt program text (das ausgeführte Programm) rx, wx, ux read, write bzw. read und write Zugriff auf den File Descriptor X
lsof TYPE IPv4, IPv6 IPv4 bzw. IPv6 Socket unix UNIX domain socket (beispielsweise /dev/log) BLK block special file (beispielsweise /dev/sda) CHR character special file (beispielsweise /dev/null) DIR directory REG regular File (jede normale Datei)
lsof DEVICE SIZE NODE Major und Minor Number von Geräten (beispielsweise 3,1 für /dev/hda1) Speicheradresse für Sockets Referenznummer des Kernels für Ressourcen Größe der Ressource in Bytes inode der Ressource
strace trace system calls Nur der Linux Kernel kann direkt auf Ressourcen zugreifen und sie manipulieren (Speicherinhalte ändern, auf Dateien zugreifen,...) Alle Programme im user space müssen dem Kernel daher durch sogenannte system calls mitteilen was sie tun möchten strace kann uns sämtliche system calls anzeigen, die ein Programm aufruft
Wichtige Systemaufrufe Datei und Verzeichniszugriffe open, close, read, write, chdir, mkdir, rmdir, rename, unlink,... Datei und Vezeichnisattribute auswerten und ändern chmod, chown, stat, fstat, access,... Netzwerkzugriffe socket, bind, listen, accept, connect, send,... Erzeugen und Beenden von Prozessen execve, fork, vfork, exit,... Speicherzugriffe mmap2, brk, mprotect,...
strace Syntax strace PROGRAMM startet und verfolgt Programm strace -p PID dockt sich an den Prozess an strace -e SYSTEMCALL,SYSTEMCALL PROGRAMM strace zeigt nur gelistete system calls an strace -f PROGRAMM Auch Unterprozesse werden verfolgt
iostat input/output statistics iostat zeigt beim Aufruf die durchschnittliche Auslastung des Systems (ähnlich wie top) und die durchschnittliche I/O Auslastung seit dem letzten Bootvorgang an
iostat Im Intervallmodus zeigt iostat die Differenzen zum letzten Intervall an iostat -x 10 Zeigt erweiterte Angaben ( x) zur I/O Auslatung an und generiert alle 10 Sekunden einen neuen Report
iostat tps transfers per second r/s bzw. w/s Lese bzw. Schreibzugriffe pro Sekunde avgrq sz Durchschnittsgröße der Requests in Sektoren avgqu sz Durchschnittsgröße der Warteschlange des Geräts await Durchschnittliche Wartezeit bis zur Erfüllung des I/O Requests in ms rrqm/s bzw. wrqm/s Anzahl der Lese bzw. Schreibzugriffsaufträge pro Sekunde, die zusammengeführt wurden (das System gruppiert die Requests um performanter arbeiten zu können)
iotop I/O Monitor iotop funktioniert wie top für I/O iotop erfordert spezielle Kerneloptionen CONFIG_TASK_IO_ACCOUNTING CONFIG_TASKSTATS Serienmäßig bieten das bisher nur Debian Lenny und Fedora 10
netstat network connections and interface statistics netstat -u bzw. -t UDP bzw. TCP Sockets anzeigen netstat -l nur Serversockets anzeigen netstat -a zeigt Serversockets und Verbindungen an netstat -p zeigt zugehörige Prozesse an
TCP Handshake und Teardown
Die missverstandenen States TIME_WAIT Im TIME_WAIT Zustand wird auf Pakete gewartet, die evtl. noch im Netzwerk sind. Dadurch wird verhindert, dass ein verspätet eintreffendes Paket eine neue Verbindung auf dem gleichen Socket stört. TIME_WAIT dauert in der Regel 2 Minuten (2 x Maximum Segment Lifetime). Danach kann kein verspätetes Paket mehr eintreffen. Die Applikation hat die Kontrolle bereits an das OS bzw. den IP STACK abgegeben. TIME_WAIT blockiert demnach keine Ressourcen der Applikation. TIME_WAIT ist gut ;)
Die missverstandenen States CLOSE_WAIT Das lokale Ende der Verbindung hat ein FIN erhalten und mit einem ACK bestätigt. Die Applikation hat die Kontrolle über den Socket noch nicht abgegeben. Daher kann der IP Stack noch kein FIN senden. CLOSE_WAIT ist kein Problem des IP Stacks. Der Timeout kann nicht konfiguriert werden. Es ist ein Fehler in der Applikation!
Weitere nützliche Tools iptraf Tool zur Anzeige des Traffics auf einem Interface tcpdump/tshark & wireshark Network Sniffer und Paket Analyzer mtr traceroute Alternative ethtool Setzen und Auslesen der Einstellungen für Netzwerkkarten powertop Leistungsverbrauch auf Intel basierten Laptops
Und nun... Herzlichen Dank für Ihren Besuch und Ihre Aufmerksamkeit! Stefan Semmelroggen s.semmelroggen@heinlein support.de Telefon: 030 / 40 50 51 0
Heinlein Professional Linux Support GmbH AKADEMIE Von Profis für Profis: Wir vermitteln die oberen 10% Wissen. Geballtes Wissen und umfangreiche Praxiserfahrung aus erster Hand. SUPPORT LPIC 2 Profis realisieren auch anspruchsvolle Projekte für Sie vor Ort. Im Heinlein CompetenceCall lösen sie Notfälle, auf Wunsch mit garantierten 24/7 Verfügbarkeiten. HOSTING Wenn Hosting kein Massengeschäft sein darf: Individuelles Business Hosting mit perfekter Maintenance durch unsere Linux Profis. Sicherheit und Verfügbarkeit werden bei uns groß geschrieben.