Der Speicherplatz auf der EC2-Instanz füllt sich ständig ohne zugehörige Dateien / Verzeichnisse

8

Wie kommt es, dass OS zeigt, dass 6.5G verwendet wird, aber ich sehe nur 3.6G in Dateien / Verzeichnissen?

Laufen als Root auf einem Amazon Linux AMI (scheint wie Centos), viel freier Speicher verfügbar, kein Austausch, kein offensichtliches Problem mit Dateideskriptoren. Das einzige, was mir einfällt, ist eine Protokolldatei, die gelöscht wurde, während Anwendungen daran angehängt wurden.

Die Speicherplatznutzung steigt langsam, aber kontinuierlich in Richtung voller Kapazität (~ 1 k / min mit sehr geringen Abnahmen von Zeit zu Zeit).

Irgendeine Erklärung? Lösung?

du --max-depth = 1 -h /
1,2 G / usr
4,0 K / cgroup 22 M / lib64 11
M
/ sbin 19 M
/ etc
52 K / dev
2,1 G / var
4,0 K / media
0 / sys
4,0 K / selinux
du: kann nicht zugreifen /proc/14024/task/14024/fd/4': No such file or directory du: cannot access<br/> / proc / 14024 / task / 14024 / fdinfo / 4 ': Keine solche Datei oder kein solches Verzeichnis du:
kann nicht auf /proc/14024/fd/4': No such file or directory du: cannot<br/> access/ proc / 14024 / fdinfo / 4' zugreifen: Keine solche Datei oder kein solches Verzeichnis 0 / proc
18M / home
4.0K / logs
8.1M / bin
16K / lost + found
12M / tmp
4.0K / srv
35M / boot
79M / lib
56K / root
67M / opt
4,0 K / lokal
4,0 K / mnt
3,6 G /

df -h

Verwendete
Dateisystemgröße Verfügbare Verwendung% Bereitgestellt auf / dev / xvda1 7,9 G 6,5 G 1,4 G 84% / tmpfs 3,7 G 0 3,7 G 0% / dev / shm

sysctl fs.file-nr fs.file-nr = 864 0 761182

Sasher
quelle

Antworten:

4

Wenn eine gelöschte Datei von einem Prozess noch geöffnet wird, wird der Speicherplatz erst zurückgefordert, wenn der Prozess die Datei schließt (oder beendet wird). Wenn Sie den Prozess, bei dem eine Datei geöffnet ist, nicht identifizieren können, hilft ein Neustart, da dadurch alle laufenden Prozesse geschlossen werden (und somit alle geöffneten Dateien geschlossen werden).

Eine weitere Überlegung ist die Beschädigung des Dateisystems. Da dies Ihr Root-Dateisystem ist, müssen Sie möglicherweise einen Neustart durchführen und beim Neustart eine Dateisystemprüfung erzwingen ( shutdown -rF now). Stellen Sie sicher, dass Sie für die Durchführung eines nicht interaktiven Scan + Fix konfiguriert sind, es sei denn, Sie haben KVM-Zugriff oder ähnliches (damit Sie während des Startvorgangs interagieren können). Andernfalls bleibt Ihr Remotecomputer hängen und wartet auf lokale Eingaben, wenn während der Überprüfung Fehler festgestellt werden.

Bearbeiten: (gemäß Frage im Kommentar)

Wenn Sie den Prozess kennen, bei dem die Datei geöffnet bleibt, können Sie diesen bestimmten Prozess einfach neu starten (entweder über Service Stop / Start / Restart-Skripts oder durch manuelles Beenden und Neustarten) und nicht die gesamte Instanz.

Einige Programme unterstützen auch das Zurücksetzen ohne Neustart, was normalerweise das Schließen und Neustarten von Protokolldateien (Lösen Ihres Problems, wenn es tatsächlich auf eine gelöschte Protokolldatei zurückzuführen ist, die noch geöffnet ist) als Reaktion auf das Senden eines SIGHUP-Signals (via kill) umfasst. . Das Zurücksetzen von Prozessen auf diese Weise ist manchmal vorzuziehen, da dadurch die Zeit reduziert wird (oft auf Null), in der ein Serverprozess keine neuen Verbindungen akzeptieren kann. Dies ist oft das, was geschieht , wenn Sie /etc/init.d/<service> reloadstatt /etc/init.d/<service> restart(wenn Tatsache , die ich gesehen habe auf restartdiese Weise implementiert , um eine ordnungsgemäße vollständigen Reset Sie tun müssen , zu tun /etc/init.d/<service> stop; /etc/init.d/<service> start).

David Spillett
quelle
Wenn ich den Prozess erhalten habe und den Pfad der gelöschten Datei kenne, gibt es eine Möglichkeit, diesen schwebenden Speicherplatz freizugeben, ohne ihn neu zu starten?
Sasher
Es ist gelungen, den Speicherplatz ohne Neustart für den Prozess, der ihn hält, zurückzugewinnen. 1) cd /proc/`lsof|grep '<deleted_file>|awk '{print $2}'`/fdll | grep <deleted_file>> <fd>
Gehen Sie zum Pfad der Speicherprozess-
1
In meinem Fall war es mysqld, ein massives Protokoll offen zu halten, von dem ich dachte, ich hätte es aufgeräumt. Ich habe mysql neu gestartet und es hat den Speicherplatz frei gemacht. Danke.
Dgig
2

Es ist gelungen, den Speicherplatz ohne Neustart für den Prozess zurückzugewinnen, der ihn über die fd-Links in / proc // fd / offen hält.

1) Gehen Sie zum Pfad der Dateiskriptoren des Halteprozesses:

cd /proc/`lsof|grep '<deleted_file>'|head -1|awk '{print $2}'`/fd

2) Prozess finden fd Link:

ll | grep <deleted_file>

3) mit Leerzeichen überschreiben (alle Daten gehen verloren)

 > <fd>
Sasher
quelle