Einige Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung)

Einige Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung)

Swap deaktivieren

Wenn auf dem Server ein Datenbankdienst oder ein Nachrichten-Middleware-Dienst ausgeführt wird, deaktivieren Sie bitte die Swap-Partition.

echo "vm.swappiness = 0" >> /etc/sysctl.conf
sysctl -p

OOM-Killer

Im Allgemeinen sind unsere Linux-Dienste gemeinsam genutzte Dienste, und der von jedem Programm angeforderte physische Speicher wird gemeinsam genutzt. Wenn der physische Speicher beispielsweise nur 1 GB beträgt, können zwei Programme gestartet werden, die jeweils 1 GB anfordern. Linux verwendet diese Überzuweisungsmethode, um den Speicher vollständig zu nutzen. Wenn der vom Programm tatsächlich verwendete Speicher den physischen Speicher überschreitet, beendet das System einige Programme entsprechend ihrer Priorität, um den normalen Betrieb anderer Programme sicherzustellen. Um das Beenden von Kerndiensten zu vermeiden, kann die Prozessdatei auf die höchste Priorität eingestellt werden.

# Je kleiner der Wert, desto unwahrscheinlicher ist es, dass es beendet wird echo -17 > /proc/$pid/oom_score_adj

TCP

Da die Datenbank und einige von uns bereitgestellte Nachrichten-Middleware-Dienste alle im Intranet funktionieren, können wir die TCP-Parameter für das Intranet optimieren.

  • net.ipv4.tcp_syn_retries

Der Standardwert ist 6 und der Referenzwert ist 2. Wenn der Host als Client fungiert und eine TCP-Verbindung zur Außenwelt initiiert (der erste Schritt des Drei-Wege-Handshakes), sendet der Kernel die SYN-Nachricht und versucht es die angegebene Anzahl von Malen erneut. Wenn diese Anzahl überschritten wird, wird die Verbindung abgebrochen. Die Intranetumgebung verfügt über eine gute Kommunikation, sodass dieser Wert entsprechend reduziert werden kann

  • net.ipv4.tcp_synack_retries

Der Standardwert ist 5 und der Referenzwert ist 2. Wenn der Host als Server fungiert und eine TCP-Verbindung akzeptiert, sendet er im zweiten Schritt des Drei-Wege-Handshakes eine SYN+ACK-Nachricht an den Client, versucht es erneut und bricht die Verbindung nach dieser Anzahl von Wiederholungsversuchen ab. Dieser Wert kann in der Intranet-Umgebung entsprechend reduziert werden

  • net.ipv4.tcp_timestamps

Ob der Zeitstempel aktiviert werden soll. Wenn aktiviert, kann RTT genauer berechnet werden. Einige andere Funktionen basieren ebenfalls auf dem Zeitstempelfeld.

  • net.ipv4.tcp_tw_reuse

Der Standardwert ist 0 und der empfohlene Wert ist 1. Ob die Verwendung von Sockets im Status TIME_WAIT für neue TCP-Verbindungen zugelassen werden soll. Dies ist sehr effektiv bei der Reduzierung der TIME_WAIT-Anzahl. Dieser Parameter wird nur wirksam, wenn tcp_timestamps aktiviert ist.

  • net.ipv4.tcp_tw_recycle

Ob das schnelle Recycling von TIME_WAIT-Sockets aktiviert werden soll, was eine radikalere Methode als tcp_tw_reuse ist, und hängt auch von der Option tcp_timestamps ab. Es wird dringend empfohlen, tcp_tw_recycle aus zwei Gründen nicht zu aktivieren. Erstens ist TIME_WAIT ein notwendiger Status, um eine Verwechslung zwischen den Daten der geschlossenen Verbindung und der neu hergestellten Verbindung zu vermeiden. Zweitens führt die Option tcp_tw_recycle dazu, dass einige neue Verbindungen in einer NAT-Umgebung abgelehnt werden. Da jeder Host unter NAT einen Zeitunterschied hat, wird dies im Zeitstempelfeld im Socket widergespiegelt. Der Server wird feststellen, dass der Zeitstempel auf einer bestimmten IP, der hätte erhöht werden sollen, verringert wurde, und die Nachricht mit einem relativ verringerten Zeitstempel wird verworfen.

  • net.core.somaxconn

Der Standardwert ist 128 und der Referenzwert ist 2048. Definiert die maximale Länge der Abhörwarteschlange an jedem Port im System. Wenn der Server einen Port abhört, führt das Betriebssystem den Drei-Wege-Handshake für die Verbindungsanforderung des Clients durch. Diese hergestellten Verbindungen werden in einer Warteschlange gespeichert und warten darauf, durch einen Annahmeaufruf entfernt zu werden. Diese Option definiert die Länge der Warteschlange. Durch Erhöhen dieses Wertes kann die Anzahl serverseitiger Ablehnungen in Szenarien mit hoher Parallelität verringert werden.

  • net.ipv4.tcp_max_syn_backlog

Die Client-Anforderung wird serverseitig von zwei Warteschlangen verwaltet. Eine davon ist eine Warteschlange, in der Verbindungen mit dem Client hergestellt werden und auf Annahme warten. Die Länge dieser Warteschlange wird durch den Parameter somaxconn gesteuert. Die andere ist eine separate Warteschlange, in der Verbindungen gespeichert werden, die hergestellt, aber noch nicht abgeschlossen wurden. Die Länge dieser Warteschlange wird durch tcp_max_syn_backlog gesteuert; der Standardwert ist 128 und kann auf 8192 angepasst werden.

  • net.ipv4.tcp_max_tw_buckets

Der Standardwert ist 4096 und der Referenzwert ist 100000. Definiert die maximale Anzahl von TIME_WAIT-Sockets, die das System gleichzeitig verwalten kann. Wenn diese Zahl überschritten wird, werden die TIME_WAIT-Sockets sofort gelöscht und eine Warnmeldung ausgegeben. Wenn das System durch übermäßiges TIME_WAIT gestört ist, können Sie die drei Optionen tcp_max_tw_buckets, tcp_tw_reuse und tcp_timestamps anpassen, um das Problem zu beheben. Der Zustand TIME_WAIT tritt auf, wenn das Ende, das die TCP-Sitzung aktiv schließt, geschlossen wird. Wenn Sie das Problem grundsätzlich lösen möchten, lassen Sie den Client die Verbindung aktiv schließen, anstatt den Server.

Seitencache

Der Seitencache ist die System-Dirty-Page, also der IO-Cache des Systems. Bevor Daten auf die Festplatte geschrieben werden, werden sie zuerst in den Seitencache geschrieben und dann asynchron auf die Festplatte geleert. Der Schreibcache kann die IO-Zugriffsgeschwindigkeit verbessern, erhöht aber auch das Risiko eines Datenverlusts.

Es gibt drei Möglichkeiten, den Seitencache auf die Festplatte zu leeren:

  • Um freien Speicher für das System freizugeben, wenn der verfügbare physische Speicher unter einen bestimmten Schwellenwert fällt;
  • Um zu verhindern, dass schmutzige Seiten auf unbestimmte Zeit im Speicher verbleiben, wenn die Verweildauer der schmutzigen Seite einen bestimmten Schwellenwert überschreitet;
  • Ausgelöst durch einen sync()- oder fsync()-Aufruf des Benutzers.

Es gibt zwei Schreibstrategien zum Leeren, die vom System durchgeführt werden:

  • Asynchrone Ausführung der Datenträgerbereinigung ohne Blockierung der Benutzer-E/A;
  • Das Leeren erfolgt synchron und der Benutzer-E/A wird blockiert, bis die Anzahl der schmutzigen Seiten unter einen bestimmten Schwellenwert fällt.

Im Allgemeinen führt das System zuerst die erste Strategie aus. Wenn die Menge der schmutzigen Seitendaten zu groß ist und die asynchrone Ausführung die Datenträgerbereinigung nicht rechtzeitig abschließen kann, wechselt es in den synchronen Modus.

Wir können den Schwellenwert für die Löschung fehlerhafter Daten über Kernel-Parameter anpassen:

  • vm.dirty_background_ratio, Standardwert ist 10. Dieser Parameter definiert einen Prozentsatz. Wenn die Anzahl fehlerhafter Daten im Speicher diesen Prozentsatz überschreitet, verwendet das System eine asynchrone Methode, um die Daten auf die Festplatte zu übertragen.
  • vm.dirty_ratio, Standardwert ist 30. Außerdem wird ein Prozentsatz definiert. Wenn die Anzahl der schmutzigen Daten im Speicher diesen Prozentsatz überschreitet, leert das System die Festplatte synchron und die Schreibanforderung wird blockiert, bis die Anzahl der schmutzigen Daten unter dem „dirty_ratio“ liegt. Wenn der Wert immer noch höher als „dirty_background_ratio“ ist, wechseln Sie zur asynchronen Datenträgerleerung. Daher sollte „dirty_ratio“ höher sein als „dirty_background_ratio“.

Zusätzlich zur prozentualen Steuerung können Sie auch eine Ablaufzeit angeben: vm.dirty_expire_centisecs. Der Standardwert ist 3000 (30 Sekunden) und die Einheit ist 1 Hundertstelsekunde. Nach dieser Zeit werden fehlerhafte Daten asynchron auf die Festplatte geschrieben.

Sie können die aktuelle Anzahl schmutziger Seiten im System mit dem folgenden Befehl anzeigen:

cat /proc/vmstat |egrep "dirty|writeback"
nr_dirty 951
nr_writeback 0
nr_writeback_temp 0
#Die Ausgabe zeigt, dass 951 schmutzige Seiten darauf warten, auf die Festplatte geschrieben zu werden. Die Standardseitengröße beträgt 4 KB. Darüber hinaus können Sie diese Informationen auch in der Datei /proc/meminfo sehen.

Wenn die Anforderungen an die Datensicherheit nicht so hoch sind und Sie mehr Daten „zwischenspeichern“ möchten, damit der Cache bei Lesevorgängen leichter erreicht wird, können Sie das Verhältnis schmutziger Daten und die Ablaufzeit erhöhen:

vm.dirty_background_ratio = 30
vm.dirty_ratio = 60
vm.dirty_expire_centisecs = 6000

Wenn Sie nicht möchten, dass die E/A aufgrund der Datenträgerbereinigung blockiert wird, können Sie den Wert der asynchronen Datenträgerbereinigung entsprechend verringern, wodurch die E/A reibungsloser abläuft:

vm.dirty_background_ratio = 5
vm.dirty_ratio = 60

Oben finden Sie einige detaillierte Vorschläge zur Linux-Systemoptimierung (Kerneloptimierung). Weitere Informationen zur Linux-Systemoptimierung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Schritte zur Installation von MySQL 5.7 im Binärmodus und zur Optimierung des Systems unter Linux
  • PHP+Swoole+Linux zur Realisierung eines Betriebsbeispiels für Systemüberwachung und Leistungsoptimierung
  • Optimierung der MySQL-Betriebsumgebung (Linux-System)
  • Sicherheitseinstellungen und Optimierung des Linux-Apache-Serversystems
  • Eine kurze Diskussion über die Optimierung und Sicherheit des Linux-Betriebssystems

<<:  Implementierung der Vue-Anmeldefunktion

>>:  Detaillierte Erklärung des Unterschieds zwischen temporärer MySQL-Tabelle und Partitionstabelle

Artikel empfehlen

Detaillierte Erläuterung häufig verwendeter Nginx-Umschreibregeln

Dieser Artikel enthält einige häufig verwendete U...

CSS-Standard: Eigenschaft „vertical-align“

<br />Originaltext: http://www.mikkolee.com/...

HTML-Grundlagen - Zusammenfassung - Empfehlung (Absatz)

HTML-Absatz Absätze werden durch das Tag <p>...

Implementierung einer Bildfragmentierungsladefunktion basierend auf HTML-Code

Heute werden wir einen fragmentierten Bildladeeff...

So implementieren Sie ein Glücksradspiel im WeChat-Applet

Ich stelle hauptsächlich vor, wie man im WeChat-A...

So zeigen Sie Webseiten in verschiedenen Auflösungen und Browsern richtig an

Die Schlüsselcodes lauten wie folgt: Code kopieren...

Node.js+Postman zur Simulation der HTTP-Server- und Client-Interaktion

Inhaltsverzeichnis 1. Node erstellt HTTP-Server 2...

Kurze Analyse von CentOS 7 mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar

Baidu Cloud-Festplatte: Link: https://pan.baidu.c...

Diskussion über Standard-Rand- und Füllwerte allgemeiner Elemente

Heute haben wir die Frage besprochen, wie hoch de...

MySql-Lerntag 03: Verbindungs- und Abfragedetails zwischen Datentabellen

Primärschlüssel: Schlagwort: Primärschlüssel Funk...

Fähigkeiten zur Seiten-Refaktorierung – Javascript, CSS

Über JS, CSS CSS: Stylesheet oben Vermeiden Sie C...