Behandeln von Leistungsproblemen und Isolieren von Engpässen in Linux
Gilt für: ✔️ Linux-VMs
Leistungsprobleme und Engpässe
Wenn Leistungsprobleme in verschiedenen Betriebssystemen und Anwendungen auftreten, ist für jeden Fall ein eigener Ansatz für die Problembehandlung erforderlich. CPU, Arbeitsspeicher, Netzwerk und Eingabe/Ausgabe (E/A) sind wichtige Bereiche, in denen Probleme auftreten können. Jeder dieser Bereiche zeigt unterschiedliche Symptome (manchmal gleichzeitig) und erfordert andere Diagnosen und Lösungen.
Leistungsprobleme können durch eine Fehlkonfiguration der Anwendung oder des Setups verursacht werden. Ein Beispiel wäre eine Webanwendung mit einer Zwischenspeicherungsebene, die nicht ordnungsgemäß konfiguriert ist. Diese Situation löst mehr Anforderungen aus, die zurück zum Ursprungsserver fließen, anstatt von einem Cache bereitgestellt zu werden.
In einem anderen Beispiel befindet sich das Wiederholungsprotokoll einer MySQL- oder MariaDB-Datenbank auf dem Betriebssystemdatenträger oder auf einem Datenträger, der die Datenbankanforderungen nicht erfüllt. In diesem Szenario werden aufgrund des Wettbewerbs für Ressourcen und höhere Reaktionszeiten (Latenz) möglicherweise weniger Transaktionen pro Sekunde (TPS) angezeigt.
Wenn Sie das Problem vollständig verstehen, können Sie besser ermitteln, wo der Stapel angezeigt werden soll (CPU, Arbeitsspeicher, Netzwerk, E/A). Um Leistungsprobleme zu beheben, müssen Sie einen Basisplan einrichten, mit dem Sie Metriken vergleichen können, nachdem Sie Änderungen vorgenommen haben, und auswerten, ob die Gesamtleistung verbessert wurde.
Die Problembehandlung eines Virtuellen Computers (VM) unterscheidet sich nicht von der Behebung eines Leistungsproblems auf einem physischen System. Es geht darum, zu bestimmen, welche Ressource oder Komponente einen Engpass im System verursacht.
Es ist wichtig zu verstehen, dass Engpässe immer vorhanden sind. Bei der Leistungsbehandlung geht es darum, zu verstehen, wo ein Engpass auftritt und wie sie zu einer weniger beleidigenden Ressource verschoben werden.
Dieses Handbuch hilft Ihnen, Leistungsprobleme in Virtuellen Azure-Computern in der Linux-Umgebung zu ermitteln und zu beheben.
Abrufen von Leistungszeigern
Sie können Leistungszeiger abrufen, die bestätigen oder ablehnen, ob die Ressourceneinschränkung vorhanden ist.
Je nach untersuchter Ressource können Viele Tools Ihnen beim Abrufen von Daten helfen, die sich auf diese Ressource beziehen. Die folgende Tabelle enthält Beispiele für die Wichtigsten Ressourcen.
Resource | Tool |
---|---|
CPU | top , , htop mpstat , , pidstat vmstat |
Datenträger | iostat , iotop vmstat |
Network | ip , vnstat iperf3 |
Arbeitsspeicher | free , top vmstat |
In den folgenden Abschnitten werden Zeiger und Tools erläutert, mit denen Sie nach den Hauptressourcen suchen können.
CPU-Ressource
Ein bestimmter Prozentsatz der CPU wird entweder verwendet oder nicht. Ebenso verbringen Prozesse entweder Zeit in der CPU (z. B. 80 Prozent usr
Nutzung) oder nicht (z. B. 80 Prozent im Leerlauf). Das Haupttool zur Bestätigung der CPU-Auslastung ist top
.
Das top
Tool wird standardmäßig im interaktiven Modus ausgeführt. Sie aktualisiert jede Sekunde und zeigt Prozesse nach CPU-Auslastung an:
[root@rhel78 ~]$ top
top - 19:02:00 up 2:07, 2 users, load average: 1.04, 0.97, 0.96
Tasks: 191 total, 3 running, 188 sleeping, 0 stopped, 0 zombie
%Cpu(s): 29.2 us, 22.0 sy, 0.0 ni, 48.5 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 7990204 total, 6550032 free, 434112 used, 1006060 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 7243640 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22804 root 20 0 108096 616 516 R 99.7 0.0 1:05.71 dd
1680 root 20 0 410268 38596 5644 S 3.0 0.5 2:15.10 python
772 root 20 0 90568 3240 2316 R 0.3 0.0 0:08.11 rngd
1472 root 20 0 222764 6920 4112 S 0.3 0.1 0:00.55 rsyslogd
10395 theuser 20 0 162124 2300 1548 R 0.3 0.0 0:11.93 top
1 root 20 0 128404 6960 4148 S 0.0 0.1 0:04.97 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.56 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.07 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:06.00 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.05 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.04 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.03 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:00.21 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
18 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kdevtmpfs
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
21 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
22 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
Sehen Sie sich nun die Prozesszeile aus dieser dd
Ausgabe an:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22804 root 20 0 108096 616 516 R 99.7 0.0 1:05.71 dd
Sie können sehen, dass der dd
Prozess 99,7 Prozent der CPU verbraucht.
Notiz
Sie können die Cpu-Auslastung im
top
Tool anzeigen, indem Sie "1" auswählen.Das
top
Tool zeigt eine Gesamtauslastung von mehr als 100 Prozent an, wenn der Prozess multithreaded ist und mehr als eine CPU umfasst.
Ein weiterer nützlicher Verweis ist der Lastdurchschnitt. Der Lastdurchschnitt zeigt eine durchschnittliche Systemlast in 1-Minuten-, 5- und 15-Minuten-Intervallen an. Der Wert gibt die Ladeebene des Systems an. Die Interpretation dieses Werts hängt von der Anzahl der verfügbaren CPUs ab. Wenn der Auslastungsdurchschnitt beispielsweise 2 auf einem One-CPU-System ist, wird das System so geladen, dass die Prozesse in die Warteschlange aufgenommen werden. Wenn es einen Auslastungsdurchschnitt von 2 auf einem Vier-CPU-System gibt, gibt es etwa 50 Prozent gesamt CPU-Auslastung.
Notiz
Sie können die CPU-Anzahl schnell abrufen, indem Sie den nproc
Befehl ausführen.
Im vorherigen Beispiel liegt der Lastdurchschnitt bei 1,04. Dies ist ein Zwei-CPU-System, was bedeutet, dass es etwa 50 Prozent CPU-Auslastung gibt. Sie können dieses Ergebnis überprüfen, wenn Sie den CPU-Wert von 48,5 Prozent im Leerlauf feststellen. (In der top
Befehlsausgabe wird der LEERLAUF-CPU-Wert vor der id
Bezeichnung angezeigt.)
Verwenden Sie den Lastdurchschnitt als schnellen Überblick über die Leistung des Systems.
Führen Sie den uptime
Befehl aus, um den Ladedurchschnitt zu erhalten.
Datenträgerressource (E/A)
Wenn Sie E/A-Leistungsprobleme untersuchen, helfen Ihnen die folgenden Begriffe zu verstehen, wo das Problem auftritt.
Begriff | Beschreibung |
---|---|
E/A-Größe | Die Datenmenge, die pro Transaktion verarbeitet wird, in der Regel in Byte definiert. |
E/A-Threads | Die Anzahl der Prozesse, die mit dem Speichergerät interagieren. Dieser Wert hängt von der Anwendung ab. |
Blockgröße | Die E/A-Größe gemäß Definition des Sicherungsblockgeräts. |
Sektorgröße | Die Größe der einzelnen Sektoren auf der Festplatte. Dieser Wert beträgt in der Regel 512 Byte. |
IOPS | Eingabeausgabevorgänge pro Sekunde. |
Latenz | Die Zeit, zu der ein E/A-Vorgang abgeschlossen wird. Dieser Wert wird in der Regel in Millisekunden (ms) gemessen. |
Durchsatz | Eine Funktion der Menge der übertragenen Daten, die über einen bestimmten Zeitraum übertragen werden. Dieser Wert wird in der Regel als Megabyte pro Sekunde (MB/s) definiert. |
IOPS
Eingabeausgabevorgänge pro Sekunde (IOPS) sind eine Funktion der Anzahl der Eingabe- und Ausgabevorgänge (E/A), die über eine bestimmte Zeit gemessen werden (in diesem Fall Sekunden). E/A-Vorgänge können entweder Lese- oder Schreibvorgänge sein. Löschvorgänge oder Verworfen können auch als Vorgang für das Speichersystem gezählt werden. Jeder Vorgang verfügt über eine Zuordnungseinheit, die gleich der E/A-Größe entspricht.
Die E/A-Größe wird in der Regel auf Anwendungsebene als die Datenmenge definiert, die pro Transaktion geschrieben oder gelesen wird. Eine häufig verwendete E/A-Größe ist 4K. Eine kleinere E/A-Größe, die mehr Threads enthält, führt jedoch zu einem höheren IOPS-Wert. Da jede Transaktion relativ schnell abgeschlossen werden kann (aufgrund ihrer geringen Größe), ermöglicht eine kleinere E/A mehr Transaktionen im gleichen Zeitraum.
Angenommen, Sie haben dieselbe Anzahl von Threads, verwenden aber eine größere E/A. IOPS verringert sich, da jede Transaktion länger dauert, bis sie abgeschlossen ist. Der Durchsatz erhöht sich jedoch.
Betrachten Sie das folgende Beispiel:
1.000 IOPS bedeutet, dass für jede Sekunde 1.000 Vorgänge abgeschlossen sind. Jeder Vorgang dauert ungefähr eine Millisekunden. (Es gibt 1.000 Millisekunden in einer Sekunde.) Theoretisch hat jede Transaktion ungefähr eine Millisekunden bis zum Ende oder etwa 1 Ms Latenz.
Indem Sie den IOSize-Wert und den IOPS kennen, können Sie den Durchsatz berechnen, indem Sie IOSize mit IOPS multiplizieren.
Zum Beispiel:
1.000 IOPS bei 4K IOSize = 4.000 KB/s oder 4 MB/s (3,9 MB/s, um präzise zu sein)
1.000 IOPS bei 1M IOSize = 1.000 MB/s oder 1 GB/s (976 MB/s präzise)
Eine formelfreundlichere Version könnte wie folgt geschrieben werden:
IOPS * IOSize = IOSize/s (Throughput)
Throughput
Im Gegensatz zu IOPS ist der Durchsatz eine Funktion der Datenmenge im Laufe der Zeit. Dies bedeutet, dass während jeder Sekunde eine bestimmte Datenmenge entweder geschrieben oder gelesen wird. Diese Geschwindigkeit wird in Datenmenge/>>< oder Megabyte pro Sekunde (MB/s) gemessen.<
Wenn Sie den Durchsatz und die IOSize-Werte kennen, können Sie IOPS berechnen, indem Sie den Durchsatz durch IOSize dividieren. Sie sollten die Einheiten auf die kleinste Konnotation normalisieren. Wenn IOSize beispielsweise in Kilobyte (kb) definiert ist, sollte der Durchsatz konvertiert werden.
Das Formelformat wird wie folgt geschrieben:
Throughput / IOSize = IOPS
Um diese Formel in den Kontext zu setzen, sollten Sie einen Durchsatz von 10 MB/s bei einer IOSize von 4K in Betracht ziehen. Wenn Sie die Werte in die Formel eingeben, ist das Ergebnis 10.240/4=2.560 IOPS.
Notiz
10 MB ist genau gleich 10.240 KB.
Latency
Die Latenz ist die Messung der durchschnittlichen Zeit, die jeder Vorgang bis zum Abschluss benötigt. IOPS und Latenz sind miteinander verbunden, da beide Konzepte eine Funktion der Zeit sind. Bei 100 IOPS dauert jeder Vorgang etwa 10 ms, bis er abgeschlossen ist. Aber die gleiche Datenmenge könnte bei niedrigeren IOPS noch schneller abgerufen werden. Latenz wird auch als Suchzeit bezeichnet.
Grundlegendes zur Iostat-Ausgabe
Im Rahmen des Sysstat-Pakets bietet das iostat
Tool Einblicke in die Datenträgerleistungs- und Nutzungsmetriken. iostat
kann dabei helfen, Engpässe zu erkennen, die mit dem Datenträgersubsystem zusammenhängen.
Sie können in einem einfachen Befehl ausgeführt werden iostat
. Die Basissyntax lautet wie folgt:
iostat <parameters> <time-to-refresh-in-seconds> <number-of-iterations> <block-devices>
Die Parameter diktieren, welche Informationen bereitgestellt werden iostat
. Ohne Befehlsparameter iostat
werden grundlegende Details angezeigt:
[host@rhel76 ~]$ iostat
Linux 3.10.0-957.21.3.el7.x86_64 (rhel76) 08/05/2019 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
41.06 0.00 30.47 21.00 0.00 7.47
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 182.77 5072.69 1066.64 226090 47540
sdd 2.04 42.56 22.98 1897 1024
sdb 12.61 229.23 96065.51 10217 4281640
sdc 2.56 46.16 22.98 2057 1024
md0 2.67 73.60 45.95 3280 2048
Zeigt standardmäßig iostat
Daten für alle vorhandenen Blockgeräte an, obwohl für jedes Gerät minimale Daten bereitgestellt werden. Parameter sind verfügbar, die beim Identifizieren von Problemen helfen, indem erweiterte Daten bereitgestellt werden (z. B. Durchsatz, IOPS, Warteschlangengröße und Latenz).
Ausführen iostat
durch Angeben von Triggern:
sudo iostat -dxctm 1
Verwenden Sie die folgenden Parameter, um die iostat
Ergebnisse weiter zu erweitern.
Parameter | Aktion |
---|---|
-d |
Anzeigen des Gerätenutzungsberichts. |
-x |
Erweiterte Statistiken anzeigen. Dieser Parameter ist wichtig, da er IOPS-, Latenz- und Warteschlangengrößen bereitstellt. |
-c |
Zeigt den Bericht zur CPU-Auslastung an. |
-t |
Druckt die Zeit für jeden angezeigten Bericht. Dieser Parameter ist für lange Ausführung nützlich. |
-m |
Anzeigen von Statistiken in Megabyte pro Sekunde, einem lesbareren Formular. |
Die Zahl 1
im Befehl gibt iostat
an, jede Sekunde zu aktualisieren. Um die Aktualisierung zu beenden, wählen Sie STRG+C aus.
Wenn Sie die zusätzlichen Parameter einschließen, ähnelt die Ausgabe dem folgenden Text:
[host@rhel76 ~]$ iostat -dxctm 1
Linux 3.10.0-957.21.3.el7.x86_64 (rhel76) 08/05/2019 _x86_64_ (1 CPU)
08/05/2019 07:03:36 PM
avg-cpu: %user %nice %system %iowait %steal %idle
3.09 0.00 2.28 1.50 0.00 93.14
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.02 0.52 9.66 2.46 0.31 0.10 70.79 0.27 23.97 6.68 91.77 2.94 3.56
sdd 0.00 0.00 0.12 0.00 0.00 0.00 64.20 0.00 6.15 6.01 12.50 4.44 0.05
sdb 0.00 22.90 0.47 0.45 0.01 5.74 12775.08 0.17 183.10 8.57 367.68 8.01 0.74
sdc 0.00 0.00 0.15 0.00 0.00 0.00 54.06 0.00 6.46 6.24 14.67 5.64 0.09
md0 0.00 0.00 0.15 0.01 0.00 0.00 89.55 0.00 0.00 0.00 0.00 0.00 0.00
Grundlegendes zu Werten
Die Hauptspalten aus der iostat
Ausgabe werden in der folgenden Tabelle angezeigt.
Spalte | Beschreibung |
---|---|
r/s |
Lesevorgänge pro Sekunde (IOPS) |
w/s |
Schreibvorgänge pro Sekunde (IOPS) |
rMB/s |
Lesen von Megabyte pro Sekunde (Durchsatz) |
wMB/s |
Schreiben von Megabyte pro Sekunde (Durchsatz) |
avgrq-sz |
Durchschnittliche E/A-Größe in Sektoren; Multiplizieren Sie diese Zahl mit der Sektorgröße, die in der Regel 512 Bytes beträgt, um die E/A-Größe in Bytes zu erhalten (E/A-Größe) |
avgqu-sz |
Durchschnittliche Warteschlangengröße (die Anzahl der E/A-Vorgänge in der Warteschlange, die gewartet werden soll) |
await |
Durchschnittliche Zeit in Millisekunden für vom Gerät bereitgestellte E/A (Latenz) |
r_await |
Durchschnittliche Lesezeit in Millisekunden für vom Gerät bereitgestellte E/A (Latenz) |
w_await |
Durchschnittliche Lesezeit in Millisekunden für vom Gerät bereitgestellte E/A (Latenz) |
Die dargestellten iostat
Daten sind informational, aber das Vorhandensein bestimmter Daten in bestimmten Spalten bedeutet nicht, dass ein Problem vorliegt. Daten von iostat
sollten immer erfasst und analysiert werden, um mögliche Engpässe zu erhalten. Hohe Latenz könnte darauf hindeuten, dass der Datenträger einen Sättigungspunkt erreicht.
Notiz
Mit dem pidstat -d
Befehl können Sie E/A-Statistiken pro Prozess anzeigen.
Netzwerkressource
Netzwerke können zwei Hauptengpässe aufweisen: geringe Bandbreite und hohe Latenz.
Sie können vnstat
die Bandbreitendetails live erfassen. vnstat
Ist jedoch nicht in allen Verteilungen verfügbar. Das weit verbreitete iptraf-ng
Tool ist eine weitere Option zum Anzeigen des Echtzeit-Schnittstellendatenverkehrs.
Netzwerklatenz
Die Netzwerklatenz in zwei verschiedenen Systemen kann mithilfe eines einfachen ping
Befehls im Internet Control Message Protocol (ICMP) bestimmt werden:
[root@rhel78 ~]# ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=53 time=5.33 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=53 time=5.29 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=53 time=5.29 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=53 time=5.24 ms
^C
--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 5.240/5.291/5.339/0.035 ms
Um die Pingaktivität zu beenden, wählen Sie STRG+C aus.
Netzwerkbandbreite
Sie können die Netzwerkbandbreite mithilfe von Tools wie iperf3
z. B. überprüfen. Das iperf3
Tool funktioniert auf dem Server-/Clientmodell, in dem die Anwendung gestartet wird, indem das -s
Flag auf dem Server angegeben wird. Clients stellen dann eine Verbindung mit dem Server her, indem Sie die IP-Adresse oder den vollqualifizierten Domänennamen (FQDN) des Servers in Verbindung mit dem -c
Flag angeben. Die folgenden Codeausschnitte zeigen, wie das iperf3
Tool auf dem Server und Client verwendet wird.
Server
root@ubnt:~# iperf3 -s ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
Client
root@ubnt2:~# iperf3 -c 10.1.0.4 Connecting to host 10.1.0.4, port 5201 [ 5] local 10.1.0.4 port 60134 connected to 10.1.0.4 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 5.78 GBytes 49.6 Gbits/sec 0 1.25 MBytes [ 5] 1.00-2.00 sec 5.81 GBytes 49.9 Gbits/sec 0 1.25 MBytes [ 5] 2.00-3.00 sec 5.72 GBytes 49.1 Gbits/sec 0 1.25 MBytes [ 5] 3.00-4.00 sec 5.76 GBytes 49.5 Gbits/sec 0 1.25 MBytes [ 5] 4.00-5.00 sec 5.72 GBytes 49.1 Gbits/sec 0 1.25 MBytes [ 5] 5.00-6.00 sec 5.64 GBytes 48.5 Gbits/sec 0 1.25 MBytes [ 5] 6.00-7.00 sec 5.74 GBytes 49.3 Gbits/sec 0 1.31 MBytes [ 5] 7.00-8.00 sec 5.75 GBytes 49.4 Gbits/sec 0 1.31 MBytes [ 5] 8.00-9.00 sec 5.75 GBytes 49.4 Gbits/sec 0 1.31 MBytes [ 5] 9.00-10.00 sec 5.71 GBytes 49.1 Gbits/sec 0 1.31 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 57.4 GBytes 49.3 Gbits/sec 0 sender [ 5] 0.00-10.04 sec 57.4 GBytes 49.1 Gbits/sec receiver iperf Done.
Einige allgemeine iperf3
Parameter für den Client werden in der folgenden Tabelle angezeigt.
Parameter | Beschreibung |
---|---|
-P |
Gibt die Anzahl der auszuführenden parallelen Clientstreams an. |
-R |
Kehrt den Datenverkehr um. Standardmäßig sendet der Client Daten an den Server. |
--bidir |
Testet sowohl Upload als auch Download. |
Speicherressource
Speicher ist eine weitere Problembehandlungsressource, die überprüft werden kann, da Anwendungen möglicherweise einen Teil des Arbeitsspeichers verwenden. Sie können Tools wie free
z top
. B. die Allgemeine Speicherauslastung überprüfen und bestimmen, wie viel Arbeitsspeicher verschiedene Prozesse verbrauchen:
[root@rhel78 ~]# free -m
total used free shared buff/cache available
Mem: 7802 435 5250 9 2117 7051
Swap: 0 0 0
In Linux-Systemen ist es üblich, eine Speicherauslastung von 99 Prozent zu sehen. In der free
Ausgabe gibt es eine Spalte mit dem Namen buff/cache
. Der Linux-Kernel verwendet freien (nicht verwendeten) Arbeitsspeicher, um E/A-Anforderungen für bessere Reaktionszeiten zwischenzuspeichern. Dieser Vorgang wird als Seitencache bezeichnet. Während des Arbeitsspeicherdrucks (Szenarien, in denen arbeitsspeicherarm ausgeführt wird), gibt der Kernel den Speicher zurück, der für den Seitencache verwendet wird, damit Anwendungen diesen Speicher verwenden können.
In der free
Ausgabe gibt die verfügbare Spalte an, wie viel Arbeitsspeicher für prozesse verfügbar ist, die verbraucht werden können. Dieser Wert wird berechnet, indem die Mengen des Buff-/Cachespeichers und freier Arbeitsspeicher hinzugefügt werden.
Sie können den top
Befehl so konfigurieren, dass Prozesse nach Speicherauslastung sortiert werden. Sortiert standardmäßig top
nach CPU-Prozentsatz (%). Um nach Speicherauslastung (%) zu sortieren, wählen Sie umschalt M+ aus, wenn Sie ausgeführt werden.top
Der folgende Text zeigt die Ausgabe des top
Befehls:
[root@rhel78 ~]# top
top - 22:40:15 up 5:45, 2 users, load average: 0.08, 0.08, 0.06
Tasks: 194 total, 2 running, 192 sleeping, 0 stopped, 0 zombie
%Cpu(s): 12.3 us, 41.8 sy, 0.0 ni, 45.4 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st
KiB Mem : 7990204 total, 155460 free, 5996980 used, 1837764 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1671420 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
45283 root 20 0 5655348 5.3g 512 R 99.7 69.4 0:03.71 tail
3124 omsagent 20 0 415316 54112 5556 S 0.0 0.7 0:30.16 omsagent
1680 root 20 0 413500 41552 5644 S 3.0 0.5 6:14.96 python
[...]
Die RES
Spalte gibt den speicherresidierenden Speicher an. Dies stellt die tatsächliche Prozessverwendung dar. Das top
Tool bietet eine ähnliche Ausgabe in free
Bezug auf Kilobyte (KB).
Die Speicherauslastung kann größer als erwartet werden, wenn die Anwendung Speicherverluste erlebt. In einem Speicherleckszenario können Anwendungen keine Arbeitsspeicherseiten freigeben, die nicht mehr verwendet werden.
Hier ist ein weiterer Befehl, der zum Anzeigen der wichtigsten Speicherauslastungsprozesse verwendet wird:
ps -eo pid,comm,user,args,%cpu,%mem --sort=-%mem | head
Der folgende Text zeigt die Beispielausgabe des Befehls:
[root@rhel78 ~]# ps -eo pid,comm,user,args,%cpu,%mem --sort=-%mem | head
PID COMMAND USER COMMAND %CPU %MEM
45922 tail root tail -f /dev/zero 82.7 61.6
[...]
Sie können den Speicherdruck von OOM-Kill-Ereignissen (Out of Memory) ermitteln, wie in der folgenden Beispielausgabe gezeigt:
Jun 19 22:42:14 rhel78 kernel: Out of memory: Kill process 45465 (tail) score 902 or sacrifice child
Jun 19 22:42:14 rhel78 kernel: Killed process 45465 (tail), UID 0, total-vm:7582132kB, anon-rss:7420324kB, file-rss:0kB, shmem-rss:0kB
OOM wird aufgerufen, nachdem sowohl RAM (physischer Arbeitsspeicher) als auch SWAP (Datenträger) verbraucht wurden.
Notiz
Sie können den pidstat -r
Befehl verwenden, um pro Prozessspeicherstatistik anzuzeigen.
Ermitteln, ob eine Ressourceneinschränkung vorhanden ist
Sie können ermitteln, ob eine Einschränkung vorhanden ist, indem Sie die vorherigen Indikatoren verwenden und die aktuelle Konfiguration kennen. Die Einschränkung kann mit der vorhandenen Konfiguration verglichen werden.
Hier ist ein Beispiel für eine Datenträgereinschränkung:
Eine D2s_v3 VM kann 48 MB/s des nicht zwischengespeicherten Durchsatzes erreichen. An diesen virtuellen Computer ist ein P30-Datenträger angefügt, der 200 MB/s hat. Die Anwendung erfordert mindestens 100 MB/s.
In diesem Beispiel ist die begrenzende Ressource der Durchsatz des gesamten virtuellen Computers. Die Anforderung der Anwendung gegenüber dem, was die Datenträger- oder VM-Konfiguration bereitstellen kann, gibt die eingeschränkte Ressource an.
Wenn die Anwendung eine Ressource "measurement1><>" erfordert <und die aktuelle Konfiguration für <die Ressource> nur< Maß2> liefern kann, kann diese Anforderung ein grenzwertigender Faktor sein.
Definieren der einschränkenden Ressource
Nachdem Sie festgestellt haben, dass eine Ressource der grenzwertende Faktor in der aktuellen Konfiguration ist, identifizieren Sie, wie sie geändert werden kann und wie sich dies auf die Workload auswirkt. Es gibt Situationen, in denen die Begrenzung von Ressourcen aufgrund einer kostensparenden Maßnahme vorhanden sein könnte, aber die Anwendung ist weiterhin in der Lage, den Engpass ohne Probleme zu bewältigen.
Zum Beispiel:
Wenn die Anwendung 128 GB (Messung) des RAM (Ressource) erfordert und die aktuelle Konfiguration für RAM (Ressource) nur 64 GB (Messung) liefern kann, kann diese Anforderung ein begrenzter Faktor sein.
Jetzt können Sie die einschränkende Ressource definieren und Aktionen basierend auf dieser Ressource ausführen. Das gleiche Konzept gilt für andere Ressourcen.
Wenn diese begrenzenden Ressourcen als kostensparende Maßnahme erwartet werden, sollte die Anwendung die Engpässe umgehen. Wenn jedoch dieselben kostensparenden Maßnahmen vorhanden sind und die Anwendung den Mangel an Ressourcen nicht problemlos verarbeiten kann, kann diese Konfiguration Probleme verursachen.
Änderungen basierend auf abgerufenen Daten vornehmen
Das Entwerfen auf Leistung geht es nicht um die Lösung von Problemen, sondern um das Verständnis, wo der nächste Engpass auftreten kann und wie man ihn umgehen kann. Engpässe sind immer vorhanden und können nur an einen anderen Ort des Designs verschoben werden.
Wenn die Anwendung beispielsweise durch die Datenträgerleistung eingeschränkt wird, können Sie die Datenträgergröße erhöhen, um mehr Durchsatz zu ermöglichen. Das Netzwerk wird dann jedoch zum nächsten Engpass. Da Ressourcen begrenzt sind, gibt es keine ideale Konfiguration, und Sie müssen Probleme regelmäßig behandeln.
Durch Das Abrufen von Daten in den vorherigen Schritten können Sie nun Änderungen basierend auf tatsächlichen, messbaren Daten vornehmen. Sie können diese Änderungen auch mit dem Basisplan vergleichen, den Sie zuvor gemessen haben, um zu überprüfen, ob es einen spürbaren Unterschied gibt.
Betrachten Sie das folgende Beispiel:
Wenn Sie während der Ausführung der Anwendung einen Basisplan erhalten haben, haben Sie festgestellt, dass das System eine konstante CPU-Auslastung von 100 Prozent in einer Konfiguration von zwei CPUs hatte. Sie haben einen Lastdurchschnitt von 4 beobachtet. Dies bedeutete, dass das System Warteschlangenanforderungen war. Eine Änderung an einem 8-CPU-System verringerte die CPU-Auslastung auf 25 Prozent und der Lastdurchschnitt wurde auf 2 reduziert, wenn die gleiche Last angewendet wurde.
In diesem Beispiel gibt es einen messbaren Unterschied, wenn Sie die erhaltenen Ergebnisse mit den geänderten Ressourcen vergleichen. Vor der Änderung gab es eine klare Ressourceneinschränkung. Nach der Änderung gibt es jedoch genügend Ressourcen, um die Last zu erhöhen.
Migrieren von lokal zu Cloud
Migrationen von einem lokalen Setup zu Cloud Computing können von mehreren Leistungsunterschieden betroffen sein.
CPU
Je nach Architektur kann ein lokales Setup CPUs mit höheren Taktgeschwindigkeiten und größeren Caches ausführen. Das Ergebnis wäre verringerte Verarbeitungszeiten und höhere Anweisungen pro Zyklus (IPC). Es ist wichtig, die Unterschiede in CPU-Modellen und Metriken zu verstehen, wenn Sie an Migrationen arbeiten. In diesem Fall ist eine 1:1-Beziehung zwischen CPU-Zählungen möglicherweise nicht ausreichend.
Zum Beispiel:
In einem lokalen System mit vier CPUs, die mit 3,7 GHz ausgeführt werden, stehen insgesamt 14,8 GHz zur Verarbeitung zur Verfügung. Wenn die Entsprechung in der CPU-Anzahl mithilfe einer D4s_v3 VM erstellt wird, die von 2,1-GHz-CPUs unterstützt wird, steht der migrierte virtuelle Computer 8,1 GHz zur Verarbeitung zur Verfügung. Dies entspricht einer Leistungsminderung von rund 44 Prozent.
Datenträger
Die Datenträgerleistung in Azure wird durch den Typ und die Größe des Datenträgers definiert (mit Ausnahme der Ultra-Festplatte, die Flexibilität hinsichtlich Größe, IOPS und Durchsatz bietet). Die Datenträgergröße definiert IOPS- und Durchsatzgrenzwerte.
Latenz ist eine Metrik, die vom Datenträgertyp und nicht von der Datenträgergröße abhängig ist. Die meisten lokalen Speicherlösungen sind Datenträgerarrays mit DRAM-Caches. Dieser Cachetyp bietet Unter millisekunden (ca. 200 Mikrosekunden) Latenz und hohen Lese-/Schreibdurchsatz (IOPS).
Die durchschnittliche Azure-Latenz wird in der folgenden Tabelle angezeigt.
Datenträgertyp | Latency |
---|---|
Ultra disk/Premium SSD v2 | Dreistellige μs (Mikrosekunden) |
Premium-SSD/Standard-SSD | Einstellige Ms (Millisekunden) |
HDD Standard | Zweistellige Ms (Millisekunden) |
Notiz
Ein Datenträger wird gedrosselt, wenn er seine IOPS- oder Bandbreitengrenzwerte erreicht, da andernfalls die Latenz auf 100 Millisekunden oder mehr ansteigen kann.
Der Latenzunterschied zwischen einem lokalen (oft weniger als einer Millisekunden) und Premium SSD (einstellige Millisekunden) wird zu einem grenzwertigen Faktor. Beachten Sie die Unterschiede bei der Latenz zwischen den Speicherangeboten, und wählen Sie das Angebot aus, das den Anforderungen der Anwendung besser entspricht.
Network
Die meisten lokalen Netzwerksetups verwenden 10 GBit/s-Links. In Azure wird die Netzwerkbandbreite direkt durch die Größe der virtuellen Computer (VMs) definiert. Einige Netzwerkbandbreiten können 40 GBit/s überschreiten. Stellen Sie sicher, dass Sie eine Größe auswählen, die über genügend Bandbreite für Ihre Anwendungsanforderungen verfügt. In den meisten Fällen ist der Begrenzungsfaktor die Durchsatzgrenzwerte des virtuellen Computers oder Datenträgers anstelle des Netzwerks.
Arbeitsspeicher
Wählen Sie eine VM-Größe mit genügend RAM für die derzeit konfigurierten Elemente aus.
Leistungsdiagnose (PerfInsights)
PerfInsights ist das vom Azure-Support für Leistungsprobleme bei VMs empfohlene Tool. Es wurde entwickelt, um bewährte Methoden und dedizierte Analyseregisterkarten für CPU, Arbeitsspeicher und E/A zu behandeln. Sie können sie entweder über die Azure-Portal oder über den virtuellen Computer ausführen und dann die Daten für das Azure-Support Team freigeben.
PerfInsights ausführen
PerfInsights ist sowohl für das Windows- als auch für das Linux-Betriebssystem verfügbar. Stellen Sie sicher, dass Ihre Linux-Verteilung in der Liste der unterstützten Distributionen für die Leistungsdiagnose für Linux enthalten ist.
Ausführen und Analysieren von Berichten über die Azure-Portal
Wenn PerfInsights über die Azure-Portal installiert wird, installiert die Software eine Erweiterung auf dem virtuellen Computer. Benutzer können PerfInsights auch als Erweiterung installieren, indem Sie direkt zu Erweiterungen im VM-Blatt wechseln und dann eine Leistungsdiagnoseoption auswählen.
Azure-Portal Option 1
Durchsuchen Sie das Blatt "VM", und wählen Sie die Option "Leistungsdiagnose " aus. Sie werden aufgefordert, die Option (verwendet Erweiterungen) auf dem virtuellen Computer zu installieren, für den Sie sie ausgewählt haben.
Azure-Portal Option 2
Navigieren Sie im Blatt "VM" zur Registerkarte "Diagnose" und "Probleme lösen", und suchen Sie unter "VM-Leistungsprobleme" nach dem Link "Problembehandlung".
Was im PerfInsights-Bericht gesucht werden soll
Nachdem Sie den PerfInsights-Bericht ausgeführt haben, hängt der Speicherort des Inhalts davon ab, ob der Bericht über die Azure-Portal oder als ausführbare Datei ausgeführt wurde. Greifen Sie für beide Optionen auf den generierten Protokollordner zu oder (falls im Azure-Portal) lokal zur Analyse herunterzuladen.
Ausführen über das Azure-Portal
Öffnen Sie den PerfInsights-Bericht. Auf der Registerkarte Ergebnisse sind alle Ausreißer im Hinblick auf den Ressourcenverbrauch protokolliert. Wenn aufgrund einer bestimmten Ressourcenauslastung Vorkommen einer langsamen Leistung vorhanden sind, kategorisiert die Registerkarte "Ergebnisse " jede Suche entweder als "Hohe Auswirkung" oder "Mittlere Auswirkung".
Im folgenden Bericht sehen wir beispielsweise, dass ergebnisse mit mittlerer Auswirkung im Zusammenhang mit der Speicherung erkannt wurden, und wir sehen die entsprechenden Empfehlungen. Wenn Sie das Ergebnisereignis erweitern, werden mehrere wichtige Details angezeigt.
Weitere Informationen zu PerfInsights im Linux-Betriebssystem erfahren Sie unter Verwendung von PerfInsights Linux in Microsoft Azure.
Weitere Informationen
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.