Stehen Sie vor einem Leistungsproblem und vermuten, dass es mit der Cache-Nutzung zusammenhängt? Eine hohe Cache-Nutzung sollte normalerweise keine Leistungsprobleme verursachen, kann aber in einigen seltenen Fällen die Hauptursache sein.
Was ist Memory Cache
Um Vorgänge zu beschleunigen und Festplatten-E/A zu reduzieren, führt der Kernel normalerweise so viel Caching durch, wie er Speicher hat. Seiten, die zwischengespeicherte Daten enthalten, können nach Bedarf für andere Zwecke (z. B. Apps) wiederverwendet werden Der Weg ist nicht langsamer, als unberührte Seiten zu beanspruchen.
Was ist der Zweck von /proc/sys/vm/drop_caches
Durch das Schreiben in /proc/sys/vm/drop_caches kann man den Kernel auffordern, so viele saubere zwischengespeicherte Daten wie möglich sofort zu löschen. Dies führt normalerweise dazu, dass etwas Speicher offensichtlicher verfügbar wird; Unter normalen Umständen sollte dies jedoch nicht erforderlich sein.
So löschen Sie den Speichercache mit /proc/sys/vm/drop_caches
Schreiben Sie den entsprechenden Wert in die Datei /proc/sys/vm/drop_caches bewirkt, dass der Kernel saubere Caches, Dentries und Inodes aus dem Speicher löscht, wodurch dieser Speicher frei wird.
1. Führen Sie zum Löschen des PageCache nur Folgendes aus:
# sync; echo 1 > /proc/sys/vm/drop_caches
2. Um Dentries (auch als Verzeichnis-Cache bezeichnet) und Inodes zu löschen, führen Sie Folgendes aus:
# sync; echo 2 > /proc/sys/vm/drop_caches
3. Um den PageCache zu löschen, führen Dentries und Inodes aus:
# sync; echo 3 > /proc/sys/vm/drop_caches
Beim Ausführen von Sync werden Dirty Pages auf Festplatten geschrieben. Normalerweise sind schmutzige Seiten der verwendete Speicher, sodass sie nicht freigegeben werden können. Daher kann die Ausführung von Sync den nachfolgenden Löschvorgängen helfen, mehr Speicher freizugeben.
Seiten-Cache ist Speicher, der nach dem Lesen von Dateien gehalten wird. Der Linux-Kernel zieht es vor, ungenutzten Seiten-Cache zu behalten, in der Annahme, dass Dateien, die einmal gelesen wurden, höchstwahrscheinlich in naher Zukunft erneut gelesen werden, wodurch die Leistungseinbußen bei Festplatten-E/A vermieden werden.
dentry und inode_cache werden nach dem Lesen von Verzeichnis-/Dateiattributen wie open() und stat() gehalten. dentry ist in allen Dateisystemen gleich, aber inode_cache ist auf Dateisystembasis. Der Linux-Kernel zieht es vor, diese Informationen aufzubewahren, in der Annahme, dass sie in naher Zukunft wieder benötigt werden, und vermeidet so Festplatten-IO.
Hinweis :Das Starten mit dem Sync-Befehl, wie in den obigen 3 Befehlen gezeigt, ist optional. Der Sync-Befehl ermöglicht dem Kernel, so viele Dirty-Cache-Seiten wie möglich auf die Festplatte zu schreiben (um die Anzahl der Daten-Cache-Seiten zu maximieren, die gelöscht werden können).So löschen Sie den Memory Cache mit sysctl
Sie können das Cache-Drop auch mit sysctl -w vm.drop_caches=[number] auslösen Befehl.
1. Verwenden Sie den folgenden Befehl, um Pagecache, Dentries und Inodes freizugeben.
sysctl -w vm.drop_caches=3
2. Verwenden Sie den folgenden Befehl, um nur Dentries und Inodes freizugeben.
sysctl -w vm.drop_caches=2
3. Verwenden Sie den folgenden Befehl, um nur den Pagecache freizugeben.
sysctl -w vm.drop_caches=1Hinweis :Die Verwendung von vm.drop_caches kann zu einem Deadlock führen, wenn das System unter hoher Speicher- und I/O-Last steht!!!
„Saubere“ zwischengespeicherte Daten können gelöscht werden. „Dirty“ zwischengespeicherte Daten müssen irgendwo geschrieben werden. Die Verwendung von vm.drop_caches wird den Kernel niemals dazu veranlassen, den schmutzigen Cache zu löschen.