it-swarm.com.de

Ermitteln der Quelle der Speichercacheverwendung

Ich behebe ein Problem mit einem Computer, der nach einigen Tagen Betriebszeit aufgrund starker Auslagerungsbelastung langsamer wird. Das System hat 16 GB RAM und sollte im Allgemeinen in Ordnung sein, außer dass ein großes Volumen des RAM vom Cache verwendet wird und nicht bei Bedarf freigegeben wird. Die fortlaufende Verwendung führt zu einem Stillstand des Systems, während bis zu 12 GB im Cache gebunden sind.

Bevor Sie es erwähnen, bin ich mir bewusst, dass Linux Ate My Ram .

Eine typische Anzeige von kostenlos nach 3 - 4 Tagen Laufen ist:

              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        184M        280M         10G        116M
Swap:           15G        7.8G        8.1G

Zur Fehlerbehebung habe ich die Swapiness auf Null gesenkt.

$ cat /proc/sys/vm/swappiness 
0

Darüber hinaus kann ich einen Cache-Flush nicht manuell aufrufen, um einen sinnvollen Effekt zu erzielen.

$ Sudo su -c "free -h && sync && echo 3 > /proc/sys/vm/drop_caches && free -h"
              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        166M        280M         10G        104M
Swap:           15G        7.8G        8.1G
              total        used        free      shared  buff/cache   available
Mem:            15G        4.4G        186M        280M         10G        115M
Swap:           15G        7.8G        8.1G

Ich frage mich, ob es vielleicht mit dem Bordvideo mit Skylake zu tun hat. Unabhängig davon bin ich mir nicht sicher, wie ich das Problem weiter analysieren soll. Die meisten Internet-Ressourcen geben an, dass die Cache-Nutzung normal ist und bei Bedarf kostenlos wird - wenn dies eindeutig nicht der Fall ist. Wo soll ich als nächstes suchen?

3
DivinusVox

Verwenden Sie slabtop, um Informationen zum "Speichercache" zu erhalten. Mit -s können Sie die Ausgabe sortieren, und c gibt die Cachegröße an.

Sudo slabtop -s c

Für mich hat der Großteil des Caches mit inode_cache zu tun


Und zu "Swap": Sie können die Datei status in jedem Prozessverzeichnis in /proc verwenden, um herauszufinden, welcher von ihnen den Swap verwendet.

Für spezifisches Programm:

cd /proc/$(pgrep -x programname)
grep -i swap status

So rufen Sie eine Liste aller Prozesscachegrößen ab:

cd /proc
find -maxdepth 2 -iname status -exec grep -i -e name -e swap {} \; -exec echo "---" \;

die Ausgabe wäre ähnlich wie:

---
Name:   atd
VmSwap:        0 kB
---
Name:   rsyslogd
VmSwap:        0 kB
---
Name:   cron
VmSwap:        0 kB
3
Ravexina