Ich habe einen Server, auf dem Liquidsoap + Icecast Bundle und eine einfache Website (httpd + mysqld) laufen. Nichts Besonderes. Besucher über 2000 pro Tag, wobei durchschnittlich 50 gleichzeitig online sind.
Server hat 8 GB RAM. Mit der Zeit nimmt der freie Speicherplatz ständig ab, obwohl auf dem Server nichts Neues gestartet wird und keine neuen Benutzer vorhanden sind. Irgendwann beginnt es zu tauschen, die Last auf dem Server steigt und es reagiert nicht mehr. Normalerweise starte ich den Server einfach neu ...
Was kann getan werden, um zu erkennen, was genau den Speicher verliert? Ich verwende top, um die Ressourcennutzung zu überwachen, aber meines Erachtens zeigt es nichts Hilfreiches:
Gibt es eine Möglichkeit herauszufinden, wie viel Speicher verwendet wird? oder was beginnt stark auf die Festplatte zu tauschen? Gibt es eine Möglichkeit, Speicher freizugeben, ohne den Server neu zu starten?
quelle
Antworten:
Wenn Sie
top
im Batch-Modus arbeiten, um die Speichergrößen regelmäßig zu melden, können Sie sehen, wer den Speicher verwendet, wenn die Dinge nach Süden gehen. Die Ausführungsar
im Batch-Modus sollte eine gute Diagnose der Speichernutzung und der zugehörigen E / A-Vorgänge ermöglichen. Wenn Siemunin
das System überwachen, sollten Sie eine grafische Darstellung erhalten, in der genau angegeben ist, wofür der Speicher verwendet wird. Dies kann sehr hilfreich sein.Sie können limits.conf verwenden, um die maximale Kerngröße von Programmen zu begrenzen. Richtig eingestellt, sollte dies alle Programme töten, bei denen Speicherplatz verloren geht. Dies funktioniert mit dem Modul pam_limits. Limits können auch mit dem
ulimits
Befehl gesetzt werden.Sie führen einige Programme aus, die viel Speicher benötigen könnten. Einige Dinge, die Sie betrachten könnten, umfassen.
apache2
können Speicherverluste verursachen. In diesem Fall sollte die Speichergröße zunehmen. Sie können apache2MaxRequestsPerChild
so einstellen , dass Kinder nach einer bestimmten Anzahl von Verwendungen wiederverwendet werden, indem Sie den Wert auf 100 oder so setzen. Wenn das Problem dadurch behoben wird, müssen Sie das Leck beheben. Ich würde das zuerst sehen.tmpfs
Dateisystem bereitgestellt haben, kann es zu Speicherverlusten kommen, wenn Dateien bei der Verwendung nicht gelöscht werden. Große, langlebige Dateien können ebenfalls ein Problem sein.Normaler Speicherverbrauch: Freier Speicher ist etwas, von dem Sie nicht viel wollen. Wenn Ihr System schon lange nicht mehr funktioniert und viel freier Speicher vorhanden ist, stimmt etwas nicht. Jedes Mal, wenn Sie eine Datei lesen oder schreiben, werden die Blöcke in den Puffercache verschoben. Dies verringert Ihren freien Speicher und ist eine gute Sache. Das System verfügt über genügend freien Speicherplatz, um einige Programme zu starten, ohne an anderer Stelle nach Speicher zu suchen. Da viele Programme schnell ausgeführt werden, wird ihr Speicher in den freien Pool zurückgeschrieben, wenn sie nicht mehr ausgeführt werden.
Wenn Sie eine Datei lesen, die sich im Puffercache befindet, ist kein Plattenzugriff erforderlich, und der Lesevorgang wird aus dem Puffercache aufgelöst. Schreibvorgänge verwenden einen ähnlichen Mechanismus. Wenn Ihr System Speicher benötigt, wird der Puffercache als einer der ersten Bereiche verwendet. Die meisten Puffer können sofort freigegeben werden.
Wenn Sie einen Speicherverlust haben, werden Sie freien Speicher sehen und die Puffer beginnen sich zu verkleinern. Dies ist immer noch kein schwerwiegendes Problem, da der verlorene Speicher eventuell verschoben werden sollte, um den Speicherplatz auszutauschen. Ihr System läuft weiterhin einwandfrei, bis Sie den Auslagerungsspeicher ausfüllen und den verbleibenden freien Speicherplatz so weit ausschöpfen, dass die Punktprogramme nicht gestartet werden können. Es ist typisch, dass eine kleine Menge an Swap Space verwendet werden kann.
quelle
sar
wird Ihnen dabei helfen, die Partition mit der E / A zu bestimmen und das Problem möglicherweise zu erkennen.Mit diesem Befehl können Sie die 10 wichtigsten Anwendungen zur RAM-Auslastung anzeigen:
Manchmal hilft Ihnen dieser Befehl, wenn viele Unterprozesse generiert wurden:
So können Sie sehen, welche Prozesse zusammengehören.
quelle
ps
oder in dertop
Ausgabe das Richtige ist, wenn versucht wird, einen Speicherverlust zu erkennen: Ist dies nicht nur der Prozentsatz des physischen Speichers, den der Prozess derzeit verwendet? Es kann jedoch vorkommen, dass andere Teile des vom Prozess verwendeten (einschließlich des durchgesickerten) Speichers ausgelagert werden. Vielleicht ist "Größe" oder "vsize" besser geeignet, um die Größe eines Prozesses zu messen? ZBps -A --sort -size -o comm,size | head -n 11
oderps -A --sort -vsize -o comm,vsize | head -n 11
Nichts nutzt diesen Speicher wirklich in Bezug auf Anwendungen.
Sie müssen den zwischengespeicherten Wert abziehen, der den Seiten-Cache darstellt, um eine bessere Vorstellung davon zu erhalten, wie viel Speicher Sie tatsächlich im Hinblick auf die Programmauslastung verwenden.
Grundsätzlich ist dies eine gute Speicherverwaltung und das ist ideal, was Sie wollen.
Weitere Informationen finden Sie unter folgendem Link: http://www.linuxatemyram.com/
quelle
Ich bin eigentlich kein Profi, aber Flüssigseife + Eissendung sind multimedial. Wenn das System frei ist, speichert es im Cache und / oder belegt Speicher für die zukünftige Verwendung. Und wenn der Datenverkehr zu einer bestimmten Tageszeit / über einen bestimmten Zeitraum hinweg zunimmt, beginnt er zu tauschen. Zu diesem Zeitpunkt sind mehr als 8 GB RAM erforderlich, wenn die Anforderungen (Benutzer, die Inhalte anzeigen) zunehmen.
quelle