GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Was sind schmutzige Seiten in Linux

Frage :Was sind schmutzige Seiten und wozu dienen sie?

Immer wenn ein Anwendungs-/Datenbankprozess eine virtuelle Seite in den physischen Speicher einfügen muss, aber keine freien physischen Seiten übrig sind, muss das Betriebssystem verbleibende alte Seiten löschen.

Wenn die alte Seite überhaupt nicht geschrieben wurde, muss diese nicht gespeichert werden, sondern kann einfach aus der Datendatei wiederhergestellt werden. Wenn die alte Seite jedoch bereits geändert wurde, muss sie irgendwo aufbewahrt werden, damit die Anwendung/Datenbank später wiederverwendet werden kann – dies wird als schmutzige Seite bezeichnet.

Das Betriebssystem speichert solche schmutzigen Seiten in Auslagerungsdateien (damit sie aus dem physischen Speicher entfernt werden können, damit eine weitere "neue" Seite im physischen Speicher gespeichert werden kann). Wenn viele Daten aus dem Seitencache in den schmutzigen Seitenbereich entfernt werden, kann dies zu erheblichen IO führen Engpass, wenn sich das tatsächliche Auslagerungsgerät auf der lokalen Festplatte ( sda ) befindet, und darüber hinaus weitere Probleme verursachen, wenn die lokale Festplatte auch von der lokalen Root-Festplatte (OS) verwendet wird.

Der Seiten-Cache in Linux ist nur ein Festplatten-Cache, der dem Betriebssystem zusätzliche Leistung bringt, was bei intensiven hohen Lese-/Schreibvorgängen auf Dateien hilft.

Als „Unter“-Produkt des Seiten-Cache ist die Dirty Page – was im obigen Beispielfall erklärt wurde. Schmutzige Seiten können auch beobachtet werden, wenn die Anwendung in eine Datei schreibt oder eine Datei erstellt – der erste Schreibvorgang findet im Seiten-Cache-Bereich statt – daher kann das Erstellen einer Datei mit einer Größe von 10 MB sehr schnell sein:

# dd if=/dev/zero of=testfile.txt bs=1M count=100
10+0 records in
10+0 records out
10485760 bytes (100 MB) copied, 0,1121043 s, 866 MB/s

Das liegt daran, dass diese Datei im Speicherbereich und nicht auf der tatsächlichen Festplatte erstellt wird – daher ist die Reaktionszeit sehr schnell. Unter dem Betriebssystem wird so etwas in /proc/meminfo und darüber hinaus in ‘Dirty:

vermerkt

Bevor der obige Befehl ausgeführt wird – notieren Sie sich die /proc/meminfo und die ‘Dirty’-Zeile:

# more /proc/meminfo | grep -i dirty
Dirty: 96 kB

Nachdem der Befehl ausgeführt wurde:

# more /proc/meminfo | grep -i dirty
Dirty: 102516 kB

In regelmäßigen Abständen initiiert das Betriebssystem oder die Anwendung/Datenbank die Synchronisierung, wodurch die tatsächliche testfile.txt auf die Festplatte geschrieben wird:

# more /proc/meminfo | grep -i dirty
Dirty: 76 kB

Jetzt erlaubt beispielsweise die Oracle-Datenbank solche Schreibvorgänge in den Speicherbereich nicht, als ob das Betriebssystem abstürzt oder wenn SAN LUn ausfällt – Daten werden kompromittiert. Aus diesem Grund erfordert Oracle Database, dass Daten „synchron“ sind, daher müssen alle Schreibvorgänge vom Backend wie Disk/Lun bestätigt werden, bevor die Datenbank weitere Schreibanforderungen auslöst.

Normalerweise löschen Datenbanken/Anwendungen regelmäßig den Cache, daher werden schmutzige Seiten in kleinen Blöcken auf die Festplatte geschrieben. In einigen Fällen können schmutzige Seiten an Größe zunehmen, da die Anwendung/Datenbank den Seiten-Cache-Mechanismus möglicherweise nicht richtig konfiguriert hat.

So können schmutzige Seiten in Auslagerungsdateien ( Auslagerungsbereich ), aber auch in spezielle Bereiche auf der Festplatte ( LUN / Dateisystem ) schreiben. Wenn wir beispielsweise eine Auslagerungsdatei mit mehr als 100 MB erstellen, die später aus der Auslagerungsdatei wiederverwendet wird, können wir unnötige E / A-Probleme auf dem Auslagerungsgerät verursachen. Unternehmenssysteme speichern Auslagerungsdateien und Auslagerungsbereich auf dem Betriebssystem unter Solid State Drives ( SSD ) oder dedizierter LUN, daher wird die Leistung der lokalen Festplatte nicht beeinträchtigt (da normalerweise die Auslagerungsregion auf der lokalen Festplatte erstellt wird)

In einigen Fällen kann die Anwendung/Datenbank intern Probleme haben und fehlerhafte Seiten werden als Auslagerungsdateien geschrieben, aber nie wiederverwendet. Dies führt dazu, dass der Auslagerungsbereich wächst und unnötige E / A auf der lokalen Festplatte verursacht und zu einer großen Auslagerungsnutzung unter dem Betriebssystem führt.

Um herauszufinden, in welcher Phase das Betriebssystem versucht, schmutzige Seiten zurück auf die Festplattenebene zu kopieren, lesen Sie bitte die offizielle Kernel-Dokumentation zum virtuellen Speicher hier und suchen Sie nach Einstellungen wie:

vm.dirty_background_ratio
vm.dirty_ratio
vm.swappiness

und

dirty_background_ratio
dirty_ratio
dirty_background_bytes
dirty_expire_centisecs

Die obigen Einstellungen müssen pro Datenbank-/Anwendungsanforderung angepasst werden, da das Betriebssystem keine „Best Practice“-Einstellung für sie hat – sie werden pro DB/APP-Ladung/Konfiguration angepasst.

Wann immer eine Anwendung/Datenbank Speicherseiten fordert, die im physischen Speicher frei sein müssen – das Betriebssystem neigt dazu, alles im Seitencache zu halten – muss das Betriebssystem daher einige der Seiten neu zuweisen und sie als schmutzig markieren. Dieser Prozess funktioniert gut, wenn das Anwendungs-/Datenbankende richtig abgestimmt und skaliert ist – andernfalls wird es zu einer wirklich aggressiven Auslagerung kommen – da das Betriebssystem alle schmutzigen Seiten zurück auf die Auslagerungsfestplatte schreiben muss – dies kann über die vm.swappiness-Einstellung gesteuert werden.

Wenn die Anwendung/Datenbank eine zustimmende Auslagerung durchführt, kann dies zu ernsthaften E/A-Schreibvorgängen auf dem Auslagerungsgerät und zu ernsthaften Systemstillständen führen – stellen Sie immer sicher, dass die Anwendung/Datenbanken in Bezug auf die Speicherverwaltung richtig konfiguriert sind.

Wie bereits erläutert, werden nicht alle Seiten als fehlerhaft markiert – die meisten unbenutzten Seiten werden verworfen und nicht als fehlerhaft markiert (es hängt alles davon ab, ob bereits zugewiesene Seiten geändert wurden oder nicht)

Um zu überprüfen, welche PIDs den Swap-Bereich verwenden, kann der folgende Befehl verwendet werden:

for file in /proc/*/status
do 
    awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file
done | sort -k 2 -n -r

Das Freigeben von „verbrauchtem“ Auslagerungsspeicher ist wirklich begrenzt. Normalerweise wird der Auslagerungsspeicher zurückgefordert, wenn PID ordnungsgemäß beendet wird oder einfach heruntergefahren wird, aber PID beendet oder wenn es abnormal endet, wie Segfault, kann der Auslagerungsspeicher immer noch verbraucht bleiben. Eine andere Option ist ein Neustart, da das Ausführen von Swapoff- und Swapon-Befehlen ernsthafte Probleme verursachen oder sogar zu einer Systempanik führen kann.


Cent OS
  1. Überprüfen Sie, welche Art von Hardware-Steckplätzen unter Linux verfügbar sind

  2. Was sind die verschiedenen Arten von Shells in Linux?

  3. Was sind SELinux-Benutzer und wie werden Linux-Benutzer SELinux-Benutzern zugeordnet?

  4. UNIX / Linux:Was ist eine Shell? Was sind verschiedene Muscheln?

  5. Was sind DNS-Nameserver-Typen in Linux?

Was ist ein Linux-Benutzer?

So finden Sie heraus, welche Geräte in Linux mit dem Netzwerk verbunden sind

Was sind Häfen? Wie überprüfe ich offene Linux-Ports?

So finden Sie heraus, welche IP-Adressen mit Linux verbunden sind

Was sind Inodes unter Linux?

Welche Videobearbeitungsanwendungen sind unter Linux verfügbar?