
Ich verwende top und sehe, dass von 502968 KB 48064 KB verwendet werden, sodass 16884 KB frei bleiben. Wenn ich mir dann aber die einzelnen Prozesse anschaue, sehe ich, dass MySQL gelegentlich 9,4 % meines RAM verbraucht – aber sonst scheint nichts zu verbrauchen. Was verbraucht meinen ganzen RAM?
Hier ist ein Screenshot von oben:
top - 20:46:07 up 1 min, 1 user, load average: 0.18, 0.05, 0.02
Tasks: 81 total, 1 running, 80 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.4 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 502968 total, 241236 used, 261732 free, 10488 buffers
KiB Swap: 524284 total, 0 used, 524284 free, 106756 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1584 dmackey 20 0 20508 1372 1000 R 0.4 0.3 0:00.01 top
1 root 20 0 26664 2456 1340 S 0.0 0.5 0:00.69 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.01 ksoftirqd/0
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0
7 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/u:0H
8 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root 20 0 0 0 0 S 0.0 0.0 0:00.24 rcu_sched
11 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
12 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 cpuset
13 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
16 root 20 0 0 0 0 S 0.0 0.0 0:00.00 bdi-default
Und hier ist eines von free:
total used free shared buffers cached
Mem: 502968 355252 147716 0 10816 111548
-/+ buffers/cache: 232888 270080
Swap: 524284 0 524284
Antwort1
Nichts.
Es ist Linux, und das istwie es funktioniert.
Es wird „freier“ Speicher für die Datenträgerzwischenspeicherung verwendet, denn welchen Sinn hat es, eine nicht ausreichend genutzte Ressource zu haben?
Wenn ein Prozess mehr Speicher benötigt, fordert er diesen vom Kernel an und bekommt ihn (im Allgemeinen).
Oh... und MySQL wird so viel verwenden wie nötig (wie in konfiguriert /etc/my.cnf
), sodass Indizes, Abfragen und Tabellen von der Festplatte im Speicher zwischengespeichert werden, um die Zugriffszeiten zu verkürzen.
Antwort2
Es handelt sich einfach um den Müll, der zufällig im Speicher zurückgeblieben ist, egal, wie er zuletzt verwendet wurde. Höchstwahrscheinlich handelt es sich dabei um Daten, die von der Festplatte gelesen oder auf die Festplatte geschrieben wurden. Das Betriebssystem gibt den Speicher nicht frei, da dies aus drei Gründen Verschwendung wäre:
Wenn der Speicher nicht bald verwendet wird, bringt die Freigabe nichts.
Wird der Speicher bald verbraucht, ist die Freigabe lediglich Arbeit, die rückgängig gemacht werden muss, da der Speicher wieder nutzbar gemacht werden muss.
Wenn die im Speicher vorhandenen Informationen erneut benötigt werden, muss zum Freigeben des Speichers die Information von der Festplatte statt aus dem Speicher abgerufen werden, was wesentlich langsamer ist.
Moderne Betriebssysteme geben Speicher nur dann frei, wenn sie absolut keine andere Wahl haben. Wenn Sie denken: „Ich möchte diesen Speicher jetzt frei haben, damit ich ihn später verwenden kann“, hören Sie auf. Sie müssen den Speicher nicht jetzt frei haben, um ihn später verwenden zu können. Hier gibt es keinen Kompromiss, es ist ein klarer Gewinn, den Speicher in Gebrauch zu halten, bis er benötigt wird.
Antwort3
Die beste Möglichkeit, Ihre Frage zu beantworten, besteht darin, die Ausgabe von top für spätere Analysen zu protokollieren. Es gibt keine schnelle Lösung, einige Beobachtungen über einen längeren Zeitraum hinweg werden erforderlich sein. Eine einmalige Möglichkeit, die ich verwende, um an die Oberfläche dessen zu gelangen, was meinen Speicher nutzt, besteht darin, dies in die Crontab von root einzugeben.
/bin/bash top -b -n 1 | head > `/var/log/date +%e_%T`
Dann verwende ich Textmanipulation und Pager-Fu, um Trends zu verfolgen. Dieser Stack Overflow-Beitraghttps://stackoverflow.com/questions/7908953/how-to-measure-cpu-usagebietet einige ausführlichere Beispiele zur Verwendung von top auf diese Weise und zur Anpassung von top über .toprc
für CPU-Statistiken, es lässt sich aber genauso leicht an Ihre Anforderungen anpassen.