Heim System-Tutorial LINUX Warum wird der Speicherplatz nach dem Löschen einer Datei nicht freigegeben?

Warum wird der Speicherplatz nach dem Löschen einer Datei nicht freigegeben?

Jan 08, 2024 pm 02:46 PM
linux 红帽

Haben Sie jemals eine Situation erlebt, in der Dateien gelöscht wurden, aber der Speicherplatz in einer Linux-Umgebung nicht freigegeben wurde? In diesem kurzen Artikel werden ein Szenario dieses Problems und die entsprechende Lösung vorgestellt.

Einer unserer Anwendungsserver, das Betriebssystem ist Red Hat Linux, Überwachungsalarm, /opt/applog-Dateisystemnutzung überschreitet den Schwellenwert, die Gesamtkapazität beträgt 50G, aber die tatsächliche Dateikapazität beträgt 20G, wie groß ist der verbleibende 30G-Speicherplatz?

Wir wissen, dass in der Linux-Umgebung alles in Form einer Datei vorhanden ist. Das System weist im Hintergrund einen Dateideskriptor für die Interaktion zwischen der Anwendung und dem Betriebssystem zu Wenn es sich bei der Schnittstelle um eine Datei handelt, nimmt sie Speicherplatz ein. Zu diesem Zeitpunkt können Sie den Befehl lsof verwenden, mit dem die Dateien aufgelistet werden können, die derzeit vom System geöffnet werden.

>lsof
COMMAND      PID      USER   FD      TYPE    DEVICE  SIZE/OFF      NODE NAME
...
filebeat  111442   app  1r      REG     253,3 209715229   1040407 /opt/applog/E.20171016.info.012.log
filebeat  111442   app  2r      REG     253,3 209715254    385080 /opt/applog/E.20171015.info.001.log (deleted)
...
Nach dem Login kopieren

Die einzelnen Felder in der Kopfzeile haben folgende Bedeutung:

BEFEHL: Der Name des Prozesses
PID: Prozesskennung
BENUTZER: Prozessinhaber
FD: Dateideskriptor. Die Anwendung identifiziert die Datei anhand des Dateideskriptors. Wie cwd, txt usw.
TYP: Dateityp, z. B. DIR, REG usw.
GERÄT: Geben Sie den Namen der Festplatte an
GRÖSSE: Die Größe der Datei
NODE: Indexknoten (Identifizierung der Datei auf der Festplatte)
NAME: Der genaue Name der geöffneten Datei

Es ist zu erkennen, dass in einigen Zeilen NAME markiert (gelöscht) ist

/opt/applog/E.20171015.info.001.log (gelöscht)

Das bedeutet, dass die Datei gelöscht wurde, das Handle für die geöffnete Datei jedoch nicht geschlossen wurde. Der BEFEHLsname lautet „filebeat“ und der Benutzer des BENUTZER-Prozesses ist „app“. hat den Filebeat-Prozess aktiviert.

Einführung in die Protokollsammelplattform

Die traditionelle Open-Source-Protokollierungsplattform ELK besteht aus drei Open-Source-Tools: ElasticSearch, Logstash und Kiabana, darunter:

  • Elasticsearch ist eine verteilte Open-Source-Suchmaschine, verteilt, ohne Konfiguration, automatische Erkennung, automatisches Index-Sharding, Index-Kopiermechanismus, Restful-Style-Schnittstelle, mehrere Datenquellen, automatisches Suchladen usw.
  • Logstash ist ein Open-Source-Sammeltool, das Protokolle sammeln, filtern und zur späteren Verwendung speichern kann.
  • Kibana ist ein grafisches Open-Source-Webtool, das eine protokollanalysefreundliche Weboberfläche für Logstash und ElasticSearch bietet und wichtige Datenprotokolle aggregieren, analysieren und durchsuchen kann.

Allgemeines Bereitstellungsdiagramm, wie unten gezeigt

Warum wird der Speicherplatz nach dem Löschen einer Datei nicht freigegeben?

Was ist Filebeat, das oben erwähnt wurde? Welche Verbindung besteht zu ELK?

Es gibt eine Einführung des großen Experten Rao Chenlin (Autor von „ELKstack Authoritative Guide“) zu Zhihu, die sehr aufschlussreich ist und unter https://www.zhihu.com/question/54058964/answer/137882919 zitiert wird

Da Logstash von JVM ausgeführt wird und viele Ressourcen verbraucht, verwendete der Autor später Golang, um einen leichten Logstash-Forwarder mit weniger Funktionen, aber geringem Ressourcenverbrauch zu schreiben. Der Autor ist jedoch nur eine Person. Nach seinem Beitritt zu

Warum wird der Speicherplatz nach dem Löschen einer Datei nicht freigegeben?

Einfach ausgedrückt ist Filebeat der Prozessagent für die Protokollerfassung, der für die Erfassung von Anwendungsprotokolldateien verantwortlich ist.

Für mein obiges Problem liegt der Grund dafür, dass es eine große Anzahl (gelöschter) und nicht freigegebener Dateihandles gibt, darin, dass aufgrund des sehr begrenzten Speicherplatzes vorübergehend jede Stunde eine Aufgabe zum Löschen der Protokolle hinzugefügt wurde Mit anderen Worten, die geplante Aufgabe löscht automatisch einige Dateien, die Filebeat zu diesem Zeitpunkt öffnet, sodass diese Dateien zu nicht freigegebenen Dateien werden, sodass die tatsächlichen Dateien gelöscht werden, der Speicherplatz jedoch nicht freigegeben wird.

Lösung 1:

Um den belegten Speicherplatz schnell freizugeben, besteht die direkteste Methode darin, den -9-Filebeat-Prozess abzubrechen. Zu diesem Zeitpunkt wird der Speicherplatz freigegeben. Dies ist jedoch keine grundsätzliche Lösung. Geplante Aufgaben löschen auch diese von Filebeat geöffneten Dateien, wodurch der Speicherplatz voll wird.

Lösung 2:
Die Konfigurationsdatei filebeat.yml von Filebeat hat tatsächlich zwei Parameter:

  • close_older: 1h
    Beschreibung: Close old schließt den Dateihandler, für den länger als close_older keine Änderungen vorgenommen wurden. Zeitzeichenfolgen wie 2h (2 Stunden), 5m (5 Minuten) können verwendet werden.

Das heißt, wenn eine Datei innerhalb eines bestimmten Zeitraums nicht aktualisiert wurde, wird das überwachte Dateihandle geschlossen. Der Standardwert ist 1 Stunde.

  • force_close_files: false
    Hinweis: Diese Option schließt eine Datei, sobald sich der Dateiname ändert. Diese Konfigurationsoption wird nur unter Windows empfohlen. Dies kann zu Problemen führen, wenn die Datei entfernt wird vollständig entfernt werden, bis auch Filebeat den Dateihandler schließt. Während dieser Zeit kann keine neue Datei mit demselben Namen erstellt werden Es kann vorkommen, dass nach der Dateirotation der Anfang der neuen Datei übersprungen wird, da das Lesen am Ende beginnt. Wir empfehlen, diese Option auf „false“ zu belassen, aber den Wert „ignore_older“ zu verringern, um Dateien schneller freizugeben.

Das heißt, wenn sich der Dateiname ändert, einschließlich Umbenennen und Löschen, wird eine Datei automatisch geschlossen.

Wenn diese beiden Parameter entsprechend den Anwendungsanforderungen kombiniert werden, muss das Handle geschlossen werden, wenn eine Datei nicht innerhalb von 30 Minuten aktualisiert wird. Wenn die Datei umbenannt oder gelöscht wird, muss das Handle geschlossen werden

close_older: 30m

force_close_files: true

Es kann die grundlegenden Anforderungen der Filebeat-Protokollerfassung und des regelmäßigen Löschens historischer Dateien erfüllen.

Das obige ist der detaillierte Inhalt vonWarum wird der Speicherplatz nach dem Löschen einer Datei nicht freigegeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

VSCODE kann die Erweiterung nicht installieren VSCODE kann die Erweiterung nicht installieren Apr 15, 2025 pm 07:18 PM

Die Gründe für die Installation von VS -Code -Erweiterungen können sein: Netzwerkinstabilität, unzureichende Berechtigungen, Systemkompatibilitätsprobleme, VS -Code -Version ist zu alt, Antiviren -Software oder Firewall -Interferenz. Durch Überprüfen von Netzwerkverbindungen, Berechtigungen, Protokolldateien, Aktualisierungen von VS -Code, Deaktivieren von Sicherheitssoftware und Neustart von Code oder Computern können Sie Probleme schrittweise beheben und beheben.

So führen Sie Java -Code in Notepad aus So führen Sie Java -Code in Notepad aus Apr 16, 2025 pm 07:39 PM

Obwohl Notepad den Java -Code nicht direkt ausführen kann, kann er durch Verwendung anderer Tools erreicht werden: Verwenden des Befehlszeilencompilers (JAVAC), um eine Bytecode -Datei (Dateiname.class) zu generieren. Verwenden Sie den Java Interpreter (Java), um Bytecode zu interpretieren, den Code auszuführen und das Ergebnis auszugeben.

Wofür ist VSCODE Wofür ist VSCODE? Wofür ist VSCODE Wofür ist VSCODE? Apr 15, 2025 pm 06:45 PM

VS Code ist der vollständige Name Visual Studio Code, der eine kostenlose und open-Source-plattformübergreifende Code-Editor und Entwicklungsumgebung von Microsoft ist. Es unterstützt eine breite Palette von Programmiersprachen und bietet Syntax -Hervorhebung, automatische Codebettel, Code -Snippets und intelligente Eingabeaufforderungen zur Verbesserung der Entwicklungseffizienz. Durch ein reiches Erweiterungs -Ökosystem können Benutzer bestimmte Bedürfnisse und Sprachen wie Debugger, Code -Formatierungs -Tools und Git -Integrationen erweitern. VS -Code enthält auch einen intuitiven Debugger, mit dem Fehler in Ihrem Code schnell gefunden und behoben werden können.

Kann VSCODE für MAC verwendet werden Kann VSCODE für MAC verwendet werden Apr 15, 2025 pm 07:36 PM

VS -Code ist auf Mac verfügbar. Es verfügt über leistungsstarke Erweiterungen, GIT -Integration, Terminal und Debugger und bietet auch eine Fülle von Setup -Optionen. Für besonders große Projekte oder hoch berufliche Entwicklung kann VS -Code jedoch Leistung oder funktionale Einschränkungen aufweisen.

So verwenden Sie VSCODE So verwenden Sie VSCODE Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCODE) ist ein plattformübergreifender, Open-Source-Editor und kostenloser Code-Editor, der von Microsoft entwickelt wurde. Es ist bekannt für seine leichte, Skalierbarkeit und Unterstützung für eine Vielzahl von Programmiersprachen. Um VSCODE zu installieren, besuchen Sie bitte die offizielle Website, um das Installateur herunterzuladen und auszuführen. Bei der Verwendung von VSCODE können Sie neue Projekte erstellen, Code bearbeiten, Code bearbeiten, Projekte navigieren, VSCODE erweitern und Einstellungen verwalten. VSCODE ist für Windows, MacOS und Linux verfügbar, unterstützt mehrere Programmiersprachen und bietet verschiedene Erweiterungen über den Marktplatz. Zu den Vorteilen zählen leicht, Skalierbarkeit, umfangreiche Sprachunterstützung, umfangreiche Funktionen und Versionen

Was ist der Hauptzweck von Linux? Was ist der Hauptzweck von Linux? Apr 16, 2025 am 12:19 AM

Zu den Hauptanwendungen von Linux gehören: 1. Server -Betriebssystem, 2. Eingebettes System, 3. Desktop -Betriebssystem, 4. Entwicklungs- und Testumgebung. Linux zeichnet sich in diesen Bereichen aus und bietet Stabilität, Sicherheits- und effiziente Entwicklungstools.

So überprüfen Sie die Lageradresse von Git So überprüfen Sie die Lageradresse von Git Apr 17, 2025 pm 01:54 PM

Um die Git -Repository -Adresse anzuzeigen, führen Sie die folgenden Schritte aus: 1. Öffnen Sie die Befehlszeile und navigieren Sie zum Repository -Verzeichnis; 2. Führen Sie den Befehl "git remote -v" aus; 3.. Zeigen Sie den Repository -Namen in der Ausgabe und der entsprechenden Adresse an.

See all articles