Wofür verwendet der Linux-Kernel neben dem Cache erhebliche Speichermengen?

7

Mein Computer fühlt sich sehr träge an. Laut habe freeich nur noch ~ 200M RAM und mehr als ein Gigabyte musste ausgetauscht werden. Ich weiß, dass es gut ist, wenn Speicher für das Caching verwendet wird, aber das sieht so aus, als hätte ich wirklich wenig RAM.

root@desktop:/proc free -h
               total       used        free      shared  buff/cache   available
Mem:           3.9G        3.4G        132M         44M        378M        213M
Swap:          8.0G        1.2G        6.7G

smem -tkmeldet, dass höchstens 2GiB (RSS-Spalte) von Anwendungen verwendet werden. smem -wkberücksichtigt den gesamten verwendeten Speicher. Anscheinend verwendet der Kernel 1,8 GB nicht zum Zwischenspeichern:

root@desktop:/proc smem -wk
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory          1.9G      74.3M       1.8G 
userspace memory               1.8G     250.9M       1.6G 
free memory                  173.9M     173.9M          0 

Wird dieses Verhalten erwartet und wenn ja, für welche Aufgabe benötigt der Kernel so viel Speicher?

Erik
quelle
3
Bitte posten Sie die Ausgabe von </proc/slabinfo awk '{print $1, $3*$4}' |sort -k2n(dies gibt eine Aufschlüsselung der Kernel-Speichernutzung auf der ersten Ebene).
Gilles 'SO - hör auf böse zu sein'

Antworten:

1

Sie können dies auch versuchen:

Verwenden Sie sar , um über Kontextwechsel und die Verwendung von IRQ im Laufe der Zeit zu berichten. Sar ist ein großartiges, aber unbekanntes Systemüberwachungstool. Führen Sie es einen Tag lang aus und verwenden Sie dann verschiedene Berichte, um nach Seltsamkeiten zu suchen.

Schritte:

Installieren Sie das sysstat-Paket. Richten Sie den Cron-Job /etc/cron.d/wie folgt ein (überprüfen Sie , ob eine solche Datei vorhanden ist):

* * * * * root /usr/lib64/sa/sa1 -S XALL 10 6

Dadurch werden viele Daten erstellt - etwa 300 MB pro Tag. Alle 6 Sekunden wird eine Momentaufnahme der Systemstatistik erstellt . (Sie können die Frequenz auf zweimal pro Minute verringern, indem Sie "10 6" auf "2 30" ändern.)

Wenn Sie die Erfassungshäufigkeit ändern, sollten Sie die Tagesdatei in löschen, da /var/log/sa/sa$(date +%d)sonst die Berichte möglicherweise beschädigt werden.

OK, nachdem Sie Ihre Daten erfasst haben, versuchen Sie Folgendes (Tipp: Immer durchleiten less):

sar -q

Abrufen von Lastdurchschnitten und der Größe der Ausführungswarteschlange. Wenn diese niedrig sind, sehen Sie sich die Wartezeiten für E / A an:

sar -P ALL

Wenn Sie in% iowait keine Sprünge oder in% idle keine Täler sehen, sehen Sie sich die Kontextwechsel an:

saw -w

500 Kontextwechsel pro Sekunde sind auf einem System im Leerlauf ziemlich normal.

Sie können sar Berichterstattung beschränken , indem die Aktivität Datei angeben, eine Start- und Endzeit (geben -s <hh:mm:ss>und -e <hh:mm:sss>jeweils) und gegebenenfalls eine Intervallzeit mit -i <secs>(muss größer sein als Ihre Aufnahmeauflösung, durch den Cron - Job einrichten).

Beispiel:

sar -f /var/log/sa/sa$(date +%d -d yesterday) -s 09:15:00 -e 12:15:00 -i 600

In 10-Minuten-Intervallen von gestern zwischen 9:15 und 12:15 Uhr erhalten Sie zusammenfassende Informationen zur CPU.

Es gibt mehr ... viel mehr. Sie können tun man sar, um diese Informationen zu erhalten.

Otheus
quelle
0

Ich weiß nicht, warum Sie den free -hAusgabebefehl bearbeitet haben, dem die -/+ buffers/cacheZeile fehlt - was wichtig ist. Wie auch immer, wir können weitermachen.

Solange die Spalte 'Free' (in der Zeile Mem:)> 0 ist, ist der Arbeitsspeicher nicht wirklich niedrig, da dies absolut unbenutzter Arbeitsspeicher ist . Und Linux nutzt bekanntermaßen den gesamten RAM, den es bekommen kann (als Caches, in der Hoffnung auf eine bessere Leistung).

Der Swap-Teil sagt nicht die ganze Wahrheit: Es ist durchaus üblich, dass viel Code + Daten auf die Festplatte ausgetauscht werden, da er nur einmal ausgeführt und eine Weile nicht verwendet wurde. Ein weiterer Teil, in dem Linux zeigt, dass es im RAM nach Leistung strebt: Es zeigt schnell, was wahrscheinlich unwichtig ist (wiederum in Bezug auf die Leistung). Es ist abstimmbar (sysctl vm.swappiness), aber die meisten Distributionen verwenden standardmäßig "zögern Sie nicht zu tauschen".

Es ist wichtig, Ihre Hypothese zu bestätigen (langsam, da kein verfügbarer RAM vorhanden ist), wenn sie derzeit auf die Festplatte ein- oder ausgelagert wird. Die meiste Zeit ist es ziemlich einfach, Trägheit mit einer hektisch blinkenden Festplatte zu korrelieren, die auf dem Computer geführt wird. Andernfalls führen Sie die topEntwicklung der Swap-Zahlen im Laufe der Zeit aus und betrachten sie. Noch einfacher ist es, vmstat 1die Swap-E / A-Zahlen jede Sekunde direkt auszudrucken (Swap si / so).

zerodeux
quelle
Es gibt keine Puffer / Cache-Zeile. Ich habe mich gefragt, warum ich. Mein free kommt von procps-ng 3.3.10.
Erik
Es ist unfair, Linux nur als gierig zu bezeichnen, wie es den Swap verwendet: Wie schnell es austauscht, hängt von Ihrer Swappiness-Einstellung ab, die Ihnen überlassen bleibt. Versuchen sysctl vm.swappiness=10Sie, den Unterschied zu sehen.
Orion
OK, aber meistens ist die Standardeinstellung "Bitte so schnell wie möglich tauschen" und es gibt selten einen Grund, etwas anderes zu tun (es sei denn, Sie befinden sich in der Liga, in der jede ms Latenz zählt). Ich habe meinen Kommentar bearbeitet, um die Swappinness-Konfigurierbarkeit zu erwähnen.
Zerodeux