Wie man prüft, ob Kernel-Speicherlimits in Linux festgelegt sind

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir untersuchen, wie man die Kernel-Speicherlimits in Linux prüft und versteht. Wir werden uns auf die Einstellung vm.overcommit_memory konzentrieren, die steuert, wie der Kernel Anfragen zur Speicherzuweisung behandelt.

Durch praktische Schritte lernen Sie, den Befehl sysctl zu verwenden, um diesen Kernel-Parameter anzuzeigen und vorübergehend zu ändern, die Speichereinstellungen durch die Inspektion des Verzeichnisses /proc/sys/vm zu überprüfen und die dauerhaften Kernel-Konfigurationsdateien innerhalb von /etc/sysctl.d zu identifizieren. Dieses Lab bietet praktische Erfahrungen in der Verwaltung und dem Verständnis des Speicherverhaltens von Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/UserandGroupManagementGroup -.-> linux/export("Variable Exporting") subgraph Lab Skills linux/ls -.-> lab-558795{{"Wie man prüft, ob Kernel-Speicherlimits in Linux festgelegt sind"}} linux/cat -.-> lab-558795{{"Wie man prüft, ob Kernel-Speicherlimits in Linux festgelegt sind"}} linux/service -.-> lab-558795{{"Wie man prüft, ob Kernel-Speicherlimits in Linux festgelegt sind"}} linux/env -.-> lab-558795{{"Wie man prüft, ob Kernel-Speicherlimits in Linux festgelegt sind"}} linux/export -.-> lab-558795{{"Wie man prüft, ob Kernel-Speicherlimits in Linux festgelegt sind"}} end

Prüfen von Speicherlimits mit sysctl vm.overcommit

In diesem Schritt werden wir untersuchen, wie Linux die Speicherzuweisung verwaltet, wobei wir uns speziell auf die Einstellung vm.overcommit_memory mithilfe des Befehls sysctl konzentrieren.

Der Befehl sysctl wird verwendet, um Kernel-Parameter zur Laufzeit zu ändern. Diese Parameter werden oft im Verzeichnis /proc/sys/ gespeichert. Der Parameter vm.overcommit_memory steuert, wie der Kernel Anfragen für Speicher behandelt, der die verfügbare physische RAM-Kapazität überschreitet.

Es gibt drei mögliche Werte für vm.overcommit_memory:

  • 0: Heuristisches Overcommitting. Der Kernel versucht zu schätzen, ob eine Speicherzuweisungsanfrage möglich ist. Dies ist die Standardeinstellung.
  • 1: Immer Overcommitting. Der Kernel gewährt immer Speicherzuweisungsanfragen, auch wenn sie die verfügbare Speicherkapazität überschreiten. Dies kann dazu führen, dass Prozesse später abgebrochen werden, wenn sie tatsächlich versuchen, den Speicher zu nutzen.
  • 2: Nie Overcommitting. Der Kernel gewährt keine Speicherzuweisungsanfragen, wenn sie die gesamte verfügbare Swap-Speicherkapazität plus einen konfigurierbaren Prozentsatz des physischen RAM überschreiten.

Lassen Sie uns den aktuellen Wert von vm.overcommit_memory prüfen. Öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein:

sysctl vm.overcommit_memory

Drücken Sie die Eingabetaste.

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

vm.overcommit_memory = 0

Diese Ausgabe zeigt, dass die aktuelle Einstellung für vm.overcommit_memory 0 ist, was bedeutet, dass der Kernel heuristisches Overcommitting verwendet.

Das Verständnis dieser Einstellung ist wichtig für die Verwaltung von Systemressourcen und die Verhinderung von Out-of-Memory-Fehlern in bestimmten Anwendungen.

Jetzt versuchen wir, diesen Wert vorübergehend zu ändern. Wir können dies tun, indem wir sudo sysctl -w verwenden. Die Option -w ermöglicht es Ihnen, einen neuen Wert für einen Kernel-Parameter zu setzen.

Geben Sie den folgenden Befehl ein, um vm.overcommit_memory auf 1 zu setzen:

sudo sysctl -w vm.overcommit_memory=1

Drücken Sie die Eingabetaste.

Sie sollten eine Ausgabe sehen, die die Änderung bestätigt:

vm.overcommit_memory = 1

Jetzt prüfen wir den Wert erneut, um sicherzustellen, dass er geändert wurde:

sysctl vm.overcommit_memory

Drücken Sie die Eingabetaste.

Die Ausgabe sollte jetzt zeigen:

vm.overcommit_memory = 1

Beachten Sie, dass Änderungen, die mit sysctl -w vorgenommen werden, vorübergehend sind und beim Neustart des Systems zurückgesetzt werden. Wir werden in einem späteren Schritt untersuchen, wie Sie diese Änderungen dauerhaft machen können.

Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Überprüfen der Speichereinstellungen in /proc/sys/vm

Im vorherigen Schritt haben wir den Befehl sysctl verwendet, um den Kernel-Parameter vm.overcommit_memory zu prüfen und zu ändern. Jetzt schauen wir uns an, wo diese Parameter tatsächlich im Dateisystem gespeichert sind.

Linux macht Kernel-Parameter über ein virtuelles Dateisystem unter /proc/sys zugänglich. Dieses Dateisystem enthält keine echten Dateien auf der Festplatte, sondern bietet eine Schnittstelle zur Interaktion mit dem laufenden Kernel.

Die speicherbezogenen Parameter befinden sich im Verzeichnis /proc/sys/vm/. Wir können den Befehl ls verwenden, um die Dateien in diesem Verzeichnis aufzulisten.

Öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein:

ls /proc/sys/vm/

Drücken Sie die Eingabetaste.

Sie werden eine Liste von Dateien sehen, von denen jede einen Kernel-Parameter im Zusammenhang mit virtuellem Speicher darstellt. Die Ausgabe sieht ähnlich wie folgt aus (die genauen Dateien können je nach Kernel-Version geringfügig variieren):

admin_reserve_kbytes            hugetlb_shm_group             oom_kill_allocating_task
block_dump                      laptop_mode                   oom_score_adj
compact_hueristics              lowmem_reserve_ratio          overcommit_memory
compact_memory                  max_map_count                 overcommit_ratio
... (viele weitere Dateien)

Beachten Sie die Datei namens overcommit_memory. Diese Datei enthält den aktuellen Wert des vm.overcommit_memory-Parameters, mit dem wir im vorherigen Schritt gearbeitet haben.

Wir können den Befehl cat verwenden, um den Inhalt dieser Datei anzuzeigen. Denken Sie daran, dass wir den Wert im vorherigen Schritt auf 1 gesetzt haben.

Geben Sie den folgenden Befehl ein:

cat /proc/sys/vm/overcommit_memory

Drücken Sie die Eingabetaste.

Die Ausgabe sollte sein:

1

Dies bestätigt, dass der Wert, den wir mit sysctl -w festgelegt haben, in der Datei /proc/sys/vm/overcommit_memory widergespiegelt wird.

Sie können auch andere speicherbezogene Parameter in diesem Verzeichnis mit cat anzeigen. Beispielsweise, um das Overcommit-Verhältnis anzuzeigen:

cat /proc/sys/vm/overcommit_ratio

Drücken Sie die Eingabetaste.

Die Ausgabe zeigt das aktuelle Overcommit-Verhältnis, das verwendet wird, wenn vm.overcommit_memory auf 2 gesetzt ist.

50

Das Erkunden der Dateien in /proc/sys/vm/ ist eine gute Möglichkeit, die verschiedenen Kernel-Parameter zu verstehen, die die Speicherverwaltung in Linux steuern.

Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Prüfen der sysctl-Konfiguration in /etc/sysctl.d

In den vorherigen Schritten haben wir gelernt, wie man Kernel-Parameter mit sysctl prüft und vorübergehend ändert und wie diese Parameter im /proc/sys-Dateisystem widergespiegelt werden. Allerdings sind Änderungen, die mit sysctl -w vorgenommen werden, nicht dauerhaft. Um Kernel-Parameteränderungen auch nach einem Neustart beizubehalten, müssen wir sie in bestimmten Konfigurationsdateien festlegen.

Der primäre Ort für dauerhafte sysctl-Konfigurationen ist die Datei /etc/sysctl.conf. Darüber hinaus verwenden Linux-Systeme oft das Verzeichnis /etc/sysctl.d/, um Konfigurationsausschnitte in separaten Dateien zu speichern. Dieser modulare Ansatz erleichtert die Verwaltung von Konfigurationen für verschiedene Anwendungen oder Systemkomponenten.

Lassen Sie uns den Inhalt des /etc/sysctl.d/-Verzeichnisses prüfen. Wir können den Befehl ls verwenden, um die Dateien in diesem Verzeichnis aufzulisten.

Öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein:

ls /etc/sysctl.d/

Drücken Sie die Eingabetaste.

Sie werden eine Liste von Konfigurationsdateien sehen. Diese Dateien haben typischerweise die Endung .conf. Die Ausgabe könnte etwa so aussehen:

10-console-messages.conf  10-kernel-hardening.conf  10-tcp-congestion-control.conf  99-sysctl.conf

Jede dieser Dateien kann sysctl-Parameter-Einstellungen im Format parameter = value enthalten. Beim Systemstart liest das System /etc/sysctl.conf und dann alle Dateien in /etc/sysctl.d/ in alphabetischer Reihenfolge, um die dauerhaften Kernel-Parameter-Einstellungen anzuwenden.

Lassen Sie uns den Inhalt einer dieser Konfigurationsdateien anzeigen, beispielsweise 10-kernel-hardening.conf. Wir können den Befehl cat verwenden, um ihren Inhalt anzuzeigen.

Geben Sie den folgenden Befehl ein:

cat /etc/sysctl.d/10-kernel-hardening.conf

Drücken Sie die Eingabetaste.

Sie werden die in dieser Datei konfigurierten Kernel-Parameter sehen. Der Inhalt variiert, kann aber Einstellungen im Zusammenhang mit Sicherheit oder Systemverhalten enthalten.

#
## sysctl settings for kernel hardening
#

## Disable unprivileged user namespaces
kernel.unprivileged_userns_clone=0

## Protect against symlink attacks
fs.protected_hardlinks=1
fs.protected_symlinks=1

## Disable kexec
kernel.kexec_load_disabled=1

## Disable bpf JIT
net.core.bpf_jit_enable=0

## Disable ptrace access to other processes
kernel.yama.ptrace_scope=1

Sie können sehen, wie Kernel-Parameter wie kernel.unprivileged_userns_clone und fs.protected_hardlinks hier festgelegt werden.

Um unsere Einstellung vm.overcommit_memory=1 dauerhaft zu machen, würden wir normalerweise die Zeile vm.overcommit_memory = 1 in eine neue oder vorhandene Datei in /etc/sysctl.d/ (oder in /etc/sysctl.conf) hinzufügen. Allerdings werden wir aus Gründen dieses Einführungslabs diese Änderung nicht dauerhaft machen.

Das Verständnis des /etc/sysctl.d/-Verzeichnisses ist entscheidend für die Konfiguration dauerhafter Kernel-Parameter-Einstellungen auf Ihrem Linux-System.

Klicken Sie auf Weiter, um dieses Lab abzuschließen.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man die Kernel-Speicherlimits in Linux prüft und versteht, wobei wir uns speziell auf die Einstellung vm.overcommit_memory konzentriert haben. Wir haben den Befehl sysctl verwendet, um den aktuellen Wert dieses Parameters anzuzeigen, der steuert, wie der Kernel Speicherzuweisungsanforderungen behandelt, die die verfügbare physische RAM-Kapazität überschreiten. Wir haben die drei möglichen Werte (0, 1 und 2) und ihre Auswirkungen auf die Speicherverwaltung untersucht. Wir haben auch geübt, den Wert von vm.overcommit_memory vorübergehend mit sudo sysctl -w zu ändern.

Darüber hinaus haben wir die Kernel-Speichereinstellungen überprüft, indem wir das Verzeichnis /proc/sys/vm untersucht haben, das eine Dateisystem-Schnittstelle zu Kernel-Parametern bietet. Wir haben auch gelernt, wie man dauerhafte Kernel-Parameter-Konfigurationen identifiziert, indem wir die Dateien im Verzeichnis /etc/sysctl.d untersucht haben. Diese Schritte haben uns ein umfassendes Verständnis davon vermittelt, wie man Kernel-Speicherlimit-Einstellungen in einer Linux-Umgebung prüft und lokalisiert.