Unser Linux-Server reagiert sehr langsam. top
Er zeigt keine übermäßige CPU-Auslastung. Mir ist aufgefallen, dass das System, obwohl etwa 5 GB freier Speicher vorhanden sind, den gesamten Swap-Speicher nutzt und kein freier Swap-Speicher mehr übrig ist. Könnte dies der Grund dafür sein, dass das System langsam läuft? Gibt es eine andere Lösung als die Reduzierung der Anzahl der Prozesse?
Zweitens: Warum führt Linux bereits Swapping durch, obwohl freier Speicher verfügbar ist? Ich dachte, Swap wird nur verwendet, wenn kein tatsächlicher Speicher mehr vorhanden ist.
free -m
total used free shared buffers cached
Mem: 32045 26218 5826 0 127 123
-/+ buffers/cache: 25967 6077
Swap: 16387 16387 0
Aktualisieren:
- Swapiness ist auf Standardniveau: 60
- Ich glaube nicht, dass es ein Numa-System ist
- Ich sehe ein paar Java-Prozesse, die mit einem 8 GB großen Heap laufen:
-Xms8000m -Xmx8000m
Scheint auf den ersten Blick verrückt, aber möglicherweise hatte jemand Gründe, dies zu tun. Ich denke, das ist es, was den größten Teil des Swaps auffrisst, aber ich muss weiter untersuchen, wie sich der Java-Heap auf den Linux-Swap und den Speicher/die Leistung im Allgemeinen auswirkt. Alle Hinweise zu den Auswirkungen der obigen Java-Heap-Konfiguration auf die Systemleistung sind wirklich hilfreich.
Antwort1
Wie viele Java-Prozesse wurden mit dem 8-GB-Heap initialisiert? Vielleicht sollten Sie das Maximum bei 8 belassen und die anfängliche Heap-Größe verringern. Wenn Sie über den Speicherplatz verfügen, können Sie auch mit der Erhöhung der Swap-Größe experimentieren.
Antwort2
Haben Sie tmpfs
Mounts? Diese werden durch Swap gesichert und können der Grund dafür sein, dass kein Swap-Speicherplatz verfügbar ist. Tut syslog
oder dmesg
zeigt etwas Unerwartetes? Sind Sie sicher, dass Ihr System nicht ständig Swaps durchführt? Überprüfen vmstat -SK 1
und verifizieren Sie die Spalten si
und so
(ein- und ausgelagerte Seiten in KB/s). Wenn Sie wissen müssen, welche Prozesse Swaps durchführen, führen Sie aus sudo iotop -od5
. Wenn Sie Ubuntu verwenden, benötigen Sie delayacct
das Kernel-Flag für vollständige Statistiken. Mir scheint, Ihr System hat für einen so großen Systemspeicher wirklich wenig Cache und Puffer.
Der Swap wird verwendet, um die Gesamtsystemleistung zu verbessern. Ein Beispiel hierfür wäre, Teile eines großen Programms, das gerade schläft, auszulagern, um mehr Speicher für den Festplattencache oder Dateipuffer verwenden zu können. Wenn Sie in diesem Fall den Swap deaktivieren würden, hätte das System effektiv einen kleineren Festplattencache und kleinere Dateipuffer. Da Ihr Swap-Speicher voll ist, könnten Sie tatsächlich unter demselben Problem leiden.
Der Swap-Speicher ist besonders wichtig, wenn Sie Programme haben, die Speicher „verlieren“ (d. h. ein Programm belegt Speicherblöcke, die nicht wirklich verwendet werden). Ein solches „Verlust“ muss kein Fehler im Programm sein, sondern nur, weil der Speicher so selten verwendet wird, dass er besser als verlorener Speicher behandelt werden kann. Ohne Swap-Speicher kann ein solcher verlorener Speicher nicht als Cache oder Puffer verwendet werden.
Ein ordnungsgemäß laufendes Betriebssystem mit virtuellem Speicher verwendet den Swap-Speicher praktisch immer, es sei denn, der gesamte Arbeitssatz (alle aufgerufenen Dateien, der gesamte von Anwendungen reservierte Speicher und alle Schreibpuffer) passt für die gesamte Laufzeit des Systems vollständig in den Speicher. In den meisten Fällen trifft dies nur zu, wenn das System ständig neu gestartet wird oder wenn das System im Vergleich zur gesamten Dateisystemgröße über eine riesige Menge an RAM verfügt.