Was verbraucht meinen RAM im VPS?

Was verbraucht meinen RAM im VPS?

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:

  1. Wenn der Speicher nicht bald verwendet wird, bringt die Freigabe nichts.

  2. 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.

  3. 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 .toprcfür CPU-Statistiken, es lässt sich aber genauso leicht an Ihre Anforderungen anpassen.

verwandte Informationen