Bevor ich wirklich frage, nur um klar zu sein: Ja, ich kenne mich mit Festplatten-Cache aus und nein, das ist nicht mein Fall :) Entschuldigung, für diese Präambel :)
Ich verwende CentOS 5. Jede Anwendung im System ist stark ausgelagert und das System ist sehr langsam. Wenn ich das tue free -m
, habe ich Folgendes:
total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337
Also, ich habe eigentlich nur 42 MB zur Verfügung! Soweit ich das verstehe, -/+ buffers/cache
zählt der Festplattencache eigentlich nicht, also habe ich ja nur 42 MB, oder? Ich dachte, ich könnte mich irren, also habe ich versucht, das Disk-Caching auszuschalten und es hatte keine Auswirkung - das Bild blieb gleich.
Also habe ich mich entschlossen herauszufinden, wer meinen gesamten Arbeitsspeicher nutzt, und das habe ich verwendet top
. Aber anscheinend meldet es, dass kein Prozess meinen RAM verwendet. Der einzige Prozess in meiner Top ist MySQL, aber es werden 0,1% RAM und 400 MB Swap verwendet. Das gleiche Bild, wenn ich versuche, andere Dienste oder Anwendungen auszuführen - alle werden ausgetauscht, und es wird angezeigt, top
dass MEM nicht verwendet wird (maximal 0,1% für einen Prozess).
top - 15:09:00 up 2:09, 2 users, load average: 0.02, 0.16, 0.11
Tasks: 112 total, 1 running, 111 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4046868k total, 4001368k used, 45500k free, 748k buffers
Swap: 16777208k total, 68840k used, 16708368k free, 16632k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP COMMAND
3214 ntp 15 0 23412 5044 3916 S 0.0 0.1 0:00.00 17m ntpd
2319 root 5 -10 12648 4460 3184 S 0.0 0.1 0:00.00 8188 iscsid
2168 root RT 0 22120 3692 2848 S 0.0 0.1 0:00.00 17m multipathd
5113 mysql 18 0 474m 2356 856 S 0.0 0.1 0:00.11 472m mysqld
4106 root 34 19 251m 1944 1360 S 0.0 0.0 0:00.11 249m yum-updatesd
4109 root 15 0 90152 1904 1772 S 0.0 0.0 0:00.18 86m sshd
5175 root 15 0 90156 1896 1772 S 0.0 0.0 0:00.02 86m sshd
Neustart hilft nicht und ist übrigens sehr langsam, was ich auf diesem Rechner normalerweise nicht erwarten würde (4 Kerne, 4 GB RAM, RAID1).
Also, damit - ich bin mir ziemlich sicher, dass dies kein Festplatten-Cache ist, der den RAM verwendet, weil er normalerweise reduziert werden sollte und andere Prozesse den RAM nutzen lassen sollten, anstatt zu tauschen.
Schließlich stellt sich die Frage, ob jemand eine Idee hat, wie er herausfinden kann, welcher Prozess den Speicher tatsächlich so stark nutzt.
quelle
irc.freenode.org
. Ich habe hier einen Chatroom für ausführliche Diskussionen eingerichtet .free -m
wird, die Größe jedoch unter Linux abgefragt werden kanncat /proc/spl/kstat/zfs/arcstats | grep data_size
.Antworten:
Unter Linux
top
können Sie dabei die<
Taste drücken , um die Sortierung der Ausgabeanzeige nach links zu verschieben. Standardmäßig ist es nach dem sortiert.%CPU
Wenn Sie die Taste viermal drücken, wird nachVIRT
der Größe des virtuellen Speichers sortiert, nach der Sie Ihre Antwort erhalten.Ein anderer Weg, dies zu tun, ist:
sollte Ihnen und Ausgabe sortiert nach Prozessen virtuelle Größe geben.
Hier ist die lange Version:
quelle
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
auf Ubuntu Server 11.10.-o
Optionen. RHEL4 das funktioniert. RHEL5:ps -e -o pid,vsz,comm= | sort -n -k 2
funktioniert. Ich werde es später am Abend um 11.10 Uhr versuchen, aber wenn Sie vorher die richtigen Sortieroptionen gefunden haben, lassen Sie es mich bitte wissen.ps -e -o pid,vsz,comm | sort -n -k 2
könnte funktionieren, aber ich habe im Moment keinen Ort zum Überprüfen.-ef
Option nicht wirklich vertraut . Aber dies scheint eine vernünftige Ausgabe zu produzieren:sudo ps axo pid,vsz,comm=|sort -n -k 2
<
ich wusste nicht, dass das möglich ist, Fedoraps -e --format=pid,rss,args | sort --numeric-sort --key=2
Zeigen Sie den Prozessspeicher in Megabyte und den Prozesspfad an.
quelle
Nur eine Randnotiz auf einem Server, die die gleichen Symptome zeigt, aber immer noch Speichererschöpfung anzeigt. Was am Ende herausfand, war eine sysctl.conf aus einer Box mit 32 GB RAM und einem Setup für eine Datenbank mit riesigen Seiten, die auf 12000 konfiguriert wurde. Diese Box hat nur 2 GB RAM, so dass alle freien RAMs den riesigen Seiten zugewiesen wurden (nur 960 von ihnen). Durch das Festlegen von 10 für große Seiten, da ohnehin keine verwendet wurden, wurde der gesamte Speicher freigegeben.
Eine schnelle Überprüfung von / proc / meminfo, um nach den Einstellungen für HugePages_ zu suchen, kann ein guter Anfang sein, um mindestens ein unerwartetes Speicherproblem zu beheben.
quelle
In meinem Fall bestand das Problem darin, dass der Server ein virtueller VMware-Server mit
vmw_balloon
aktiviertem Modul war:Laufen:
So wurden vom Host tatsächlich rund 5 GB Speicher zurückgefordert. Obwohl ich "offiziell" 8 GB auf meiner VM hatte, war es in der Praxis viel weniger:
quelle
Sie können auch den Befehl ps verwenden, um weitere Informationen zum Prozess abzurufen.
quelle
Ich verweise auf diese und Gesamtspeicher von Python-Prozess verwendet? - Stack Overflow , das ist meine Antwort. Ich bekomme jetzt ein bestimmtes Prozesszählwerkzeug (Python).
Hänge meine Prozessliste an.
Referenz
quelle
Erstellen Sie ein Skript
show-memory-usage.sh
mit folgenden Inhalten:quelle
Dies nimmt auch die Prozess-ID, sortiert nach verwendetem MB und umreißt den Befehl (der den Prozess erstellt hat):
ps aux | awk '{print $6/1024 " MB\t\t" $2 "\t" $11}' | sort -n
quelle
Auf meinem Ubuntu-Server DISTRIB RELEASE = 18.04 unter Hyper-V wurde der größte Teil des Arbeitsspeichers verwendet, aber alle Prozesse waren in Ordnung. (Zugegeben, ich habe snapd- und unattended-upgr-Pakete entfernt, aber 95% des Speichers wurden noch verwendet.)
Die Antwort ist, dass Hyper-V über dynamischen Speicher verfügt. Daher wurde Speicher für die Hauptsystemnutzung benötigt und von Ubuntu als verwendet gekennzeichnet.
Hoffe es hilft jemandem.
quelle