


Warum wird der Speicherplatz nach dem Löschen einer Datei nicht freigegeben?
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) ...
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
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 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: Das heißt, wenn eine Datei innerhalb eines bestimmten Zeitraums nicht aktualisiert wurde, wird das überwachte Dateihandle geschlossen. Der Standardwert ist 1 Stunde. 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
force_close_files: true
Die Konfigurationsdatei filebeat.yml von Filebeat hat tatsächlich zwei Parameter:
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.
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 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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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)

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.

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.

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.

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.

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

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.

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.
