Ich habe einen 64-Bit-Server mit Ubuntu 9.10, der den gesamten verfügbaren Speicher zu verbrauchen scheint. Laut meinen Munin-Diagrammen befindet sich fast der gesamte verbrauchte Speicher im Swap-Cache, Cache und Slab-Cache. (Ich nehme an, damit sind virtuelle Speicher-Caches gemeint, liege ich mit dieser Annahme richtig?)
Sobald die Speichernutzung 100 % erreicht, werden einige (aber nicht alle) Systemdienste wie SSH träge und reagieren nicht mehr. Nach einem Neustart des Systems normalisieren sich Leistung und Speichernutzung für eine Weile.
Einige interessante Einzelheiten:
- Das System läuft mit Apache 2, MySQL, Munin und sshd.
- Die Spitzen bei der Speichernutzung treten jede Nacht zur gleichen Zeit auf (pünktlich um 22:00 Uhr).
- Es scheint für keinen der Benutzer etwas in der Crontab zu geben und in /etc/cron.d/* gibt es nichts Ungewöhnliches, geschweige denn etwas, das um 22:00 Uhr auftreten würde.
Meine Frage ist, wie finde ich heraus, was die Ursache für den Speichermangel ist? Ich habe die üblichen Dienstprogramme ausprobiert (z. B. ps, top usw.), aber ich kann scheinbar nichts Ungewöhnliches finden.
Irgendwelche Ideen? Danke im Voraus!
Antwort1
Sind Sie sicher, dass es mit dem Speicher zusammenhängt? Caches sollten nicht den gesamten Speicher aufsaugen; sie sind temporär und dynamisch und werden neu zugewiesen, wenn aktiver Speicher benötigt wird. Caches sind nur dazu da, Dinge zu beschleunigen und Speicher zu nutzen, der sonst verschwendet würde.
Ich würde wahrscheinlich nachsehen, ob etwas anderes das System verlangsamt. Stellen Sie bei Verwendung von Top eine hohe Systemlast fest? Wie hoch ist sie zu diesen Zeiten im Vergleich zu „normalen“ Zeiten? Sortieren Sie Top nach CPU-Auslastung und aktiver Speicherauslastung?
Haben Sie versucht, iotop auszuführen, um die Festplatten-E/A anzuzeigen und festzustellen, ob das Laufwerk durch etwas belastet wird?
Wie sehen alle Crontabs aus?
Hast du im Laufe des Tages mehrmals einen Snapshot von ps gemacht und diesen gegen 10:00 Uhr verglichen, um zu sehen, welche Prozesse aufgetreten sind?
Wie steht es theoretisch mit den Netzwerkverbindungen mit netstat? Ist zu diesem Zeitpunkt irgendetwas Ungewöhnliches in das System ein- oder ausgegangen?
Hört sich an, als würde es eine Systemdatenbank wie „locate“ neu aufbauen oder indizieren, aber das sollte das System nicht so weit verlangsamen, dass es zum Stillstand kommt.
Antwort2
Die Speichernutzung und die Trägheit sind Symptome desselben Problems. Zu diesem Zeitpunkt passiert etwas, das den Festplattencache des Systems überlastet. Das System nutzt jeden Rest Speicher, um übermäßige Festplatten-E/A zu vermeiden, schlägt aber trotzdem fehl.
Dies kommt am häufigsten vor, wenn viele Lesevorgänge auf Bereiche der Festplatte erfolgen, die kürzlich nicht gelesen wurden. Die kürzlich verwendeten Daten, die möglicherweise erneut verwendet werden, werden aus dem Cache verschoben und müssen beim erneuten Lesen mit dem vorhandenen Lesefluss konkurrieren.
Suchen Sie nach einem Prozess, der viele Festplatten-E/A-Vorgänge durchführt. Zum Beispiel updatedb
oder nach einer Art Backup-Skript. Wenn es sich um ein selbstgemachtes Tool handelt, kann es hilfreich sein, es so zu ändern, dass der Festplattencache umgangen wird, damit andere Dinge nicht aus dem Cache gedrängt werden. Dies kann hilfreich sein, ionice
damit zeitkritische Lesevorgänge nicht so stark beeinträchtigt werden.