
Ich habe eine Java-Anwendung, die auf einem Linux-Server mit einem zugewiesenen physischen Speicher (RAM) von 12 GB läuft. Die normale Auslastung über einen Zeitraum würde ich wie unten sehen.
sys> free -h
total used free shared buff/cache available
Mem: 11G 7.8G 1.6G 9.0M 2.2G 3.5G
Swap: 0B 0B 0B
Als ich kürzlich die Last der Anwendung erhöhte, konnte ich sehen, dass der RAM fast voll ausgelastet war und nur noch sehr wenig Speicherplatz verfügbar war, sodass es zu einer gewissen Verlangsamung kommen konnte, die Anwendung aber trotzdem weiterhin einwandfrei funktionierte.
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 134M 17M 411M 240M
Swap: 0B 0B 0B
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 145M 25M 373M 204M
Swap: 0B 0B 0B
Ich bezog mich aufhttps://www.linuxatemyram.com/wo der folgende Punkt vorgeschlagen wurde.
Warnsignaleeiner echten Situation mit wenig Arbeitsspeicher, die Sie möglicherweise untersuchen möchten:
- Der verfügbare Speicher (oder „freier Speicher + Puffer/Cache“) liegt nahe Null
- Der genutzte Swap steigt oder schwankt.
- dmesg | grep oom-killer zeigt den OutOfMemory-Killer bei der Arbeit
Aus den oben genannten Punkten erkenne ich kein OOM-Problem auf Anwendungsebene und der Swap wurde auch deaktiviert. Daher vernachlässige ich die beiden Punkte. Ein Punkt, der mir Sorgen bereitet, ist, dass der verfügbare Speicher kleiner als Null ist, wo ich eine Klarstellung benötige
Fragen:
- Wenn die Verfügbarkeit nahe 0 liegt, führt dies zu einem Systemabsturz?
- Bedeutet das, dass ich den RAM aktualisieren muss, wenn der verfügbare Speicher knapp wird?
- Auf welcher Grundlage soll der RAM-Speicher zugewiesen/erhöht werden?
- Gibt es offizielle Empfehlungen/Richtlinien, die bei der RAM-Speicherzuweisung befolgt werden müssen?
Antwort1
Ich habe eine Antwort auf meine Frage bekommen
Wenn die Verfügbarkeit nahe 0 liegt, führt dies zu einem Systemabsturz?
Beim Testen in einem meiner Server, wo ich den Speicher fast voll geladen habe, wie unten
sys> free -h
total used free shared buff/cache available
Mem: 11G 11G 135M 25M 187M 45M
Swap: 0B 0B 0B
Ich kann sehen, dass meine Anwendung allein (die mehr Speicher verbraucht hat) durch den Out of Memory-Killer beendet wurde, der in den Kernel-Protokollen aufgeführt ist.
dmesg -e
[355623.918401] [21805] 553000 21805 69 21 2 0 0 rm
[355623.921381] Out of memory: Kill process 11465 (java) score 205 or sacrifice child
[355623.925379] Killed process 11465 (java), UID 553000, total-vm:6372028kB, anon-rss:2485580kB, file-rss:0kB, shmem-rss:0kB
https://www.kernel.org/doc/gorman/html/understand/understand016.html
Der Out Of Memory Killer oder OOM Killer ist ein Prozess, den der Linux-Kernel einsetzt, wenn der Speicher des Systems kritisch knapp wird. Diese Situation tritt auf, weil der Linux-Kernel seinen Prozessen zu viel Speicher zugewiesen hat. ... Das bedeutet, dass die laufenden Prozesse mehr Speicher benötigen, als physisch verfügbar ist.