Freigeben über


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, , htopmpstat, , pidstatvmstat
Datenträger iostat, iotopvmstat
Network ip, vnstatiperf3
Arbeitsspeicher free, topvmstat

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 iperf3z. 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.

Screenshot des Bildschirms

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".

Screenshot der Registerkarte

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

Screenshot des Bildschirms

Ö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.

Screenshot des PerfInsights-Berichts und Details zu den Ergebnissen des Berichts, einschließlich Auswirkungsebene, Suchen, Betroffener Ressourcen und Empfehlungen.

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.