Ich bin einmal so frech und erlaube es mir, einen kleinen Sammelthread zu erstellen, in dem die wichtigsten Informationen rund um den neuen Kernel gesammelt werden. Denn die anderen Threads sind bereits mehrere Seiten lang, wodurch die üblichen Fragen andauernd gestellt werden. Vielleicht können wir hier wirklich nur eine Zusammenfassung posten, damit dieser Thread übersichtlich bleibt! Für alle Fragen und Diskussionen gibt es bereits genug andere Threads!
[infobox]Ich übernehme keine Verantwortung für Vollständigkeit und/oder Richtigkeit. Es handelt sich hier auch um kein offizielles Thema von Netcup, bitte beachtet das [/infobox]
[title]Original Threads:[/title]
- Änderungen des RAM Managements in neueren Kernel (Offizieller Thread)
- Wichtige Informationen zum Kernelupdate 09.04 - 11.04.2010 (Offizieller Thread)
- Kernelupdate vom 09.04.2010
- Kernelupdate vom 25.03.2010
[title]Was ist alles neu?[/title]
- Swap: Benutzter bzw. freier Swap wird vom ganzen Node angezeigt, damit man wirklich weiß, was verfügbar ist.
- Ram: Der "cached" Anteil ist bei Netcup vServern neu und sollte für schnellere Zugriffe sorgen.
- Bessere CPU/HDD Zugriffe, verbessertes Kernel Scheduling (siehe offizieller Thread)
- Bisher wusste man nicht, wie viel MB vom gemeinsamen Swap überhaupt genutzt werden können. Das ist jetzt endlich anders, da man den belegten bzw. freien Swap vom ganzen Node sehen kann. Der Swap kann also auch belegt sein, obwohl der eigene Ram noch lange nicht am Limit ist. Man kann davon ausgehen, dass man selbst swappt, wenn der eigene Ram vollständig genutzt ist (cached Werte beachten, siehe weiter unten).
Eine andauernde Ausnutzung des Swap ist trotz dieser neuen Anzeige allerdings nicht empfehlenswert!
Der Swap sollte nur für kurzfristigen Speicherbedarf verwendet werden und keine Dauerlösung sein. -
Bisher gab es keine (oder sie wurde nicht [richtig] angezeigt?) Unterstützung für den Cache beim Ram. Das ist nun endlich anders und sollte für schnellere Zugriffe und weniger Ram Verbrauch sorgen. Wer mit den neuen "cached" Werten nichts anfangen kann, sollte sich bitte einmal folgende Seiten durchlesen:-
http://wiki.debianforum.de/LinuxSpeichermanagement - http://homepage.univie.ac.at/m…matik/Folien/speicher.pdf
- http://openbook.galileocomputi…x/linux_01_kernel_004.htm
- http://virtualthreads.blogspot…emory-usage-on-linux.html
Wie bekommt man nun den wirklich verwendeten Speicher korrekt angezeigt?
-
Über htop: In htop ist der Ram sehr gut dargestellt. In der Mem-Zeile steht ganz rechts der reale Wert, z.B. 34/200MB - der grüne Balkenanteil entspricht diesen 34MB, dem wirklich genutzten Wert. Der gelbe Anteil ist nur vom Cache (cached) und wird bei Bedarf sofort verringert. Der gelbe Anteil ist also uninteressant und muss nicht beachtet werden. Hier noch ein Screenshot: http://www.happytec.at/upload_…_htop_20100410-123301.png -
Mit free (-k, -m oder -g Parameter beachten): Besser geht es fast gar nicht, eine Beispielausgabe von free -m:Codetotal used free shared buffers cached Mem: 200 113 86 0 0 77 -/+ buffers/cache: 35 164 Swap: 400 0 400
Die Zeile-/+ buffers/cache ist hier relevant, da dort bereits der "cached" Wert richtig subtrahiert wurde. Soll heißen: 113MB Ram genutzt, davon sind aber 77MB nur Cache, entspricht also ~35MB wirklich genutztem Ram. Wegen der Anzeige in MB (-m) kommt es hier zu einem kleinen Rundungsfehler -
Über /proc/meminfo: Ein simples cat /proc/meminfo liefert z.B. folgende Werte:CodeMemTotal: 204800 kB MemFree: 88308 kB Buffers: 0 kB Cached: 79648 kB SwapTotal: 409600 kB SwapFree: 409600 kB Dirty: 64 kB
Ich habe die Ausgabe hier auf die relevanten Einträge gekürzt. Die Werte sollten selbst erklärend sein. Für den wirklichen genutzten Ram gilt folgendes: MemTotal - MemFree (- Buffers) - Cached = belegter Ram
Für folgende Programme fand ich noch keine Lösungen, falls jemand eine kennt, bitte melden:
-
Über top: In top habe ich bisher noch keine Möglichkeit gefunden, alles richtig anzuzeigen.
-
-
Platzhalter für den Scheduling Bereich
[title]FAQ - Frequently Asked Questions (Häufig gestellte Fragen)[/title]
- Wie schaffe ich es mit PHP den belegten Ram auszulesen?
Sofern man die nötigen Rechte hat (exec oder ähnliche Funktion aktiviert) kann man einfach free aufrufen und das Ergebnis parsen. Alternativ kann man /proc/meminfo auslesen, entweder auch über exec() oder - sofern der OBD (open_basedir) es erlaubt direkt über file_get_contents(). Ein kurzes PHP-Beispiel:
[PHP]<?php// meminfo auslesen
@exec('cat /proc/meminfo', $result);// Und verarbeiten
$memory = array('MemTotal' => 0, 'MemFree' => 0, 'SwapTotal' => 0, 'SwapFree' => 0, 'Cached' => 0);
foreach($result as $line)
{
if(preg_match('#^(.*?):.*?([0-9]+) kB$#', $line, $matches) && isset($memory[$matches[1]]))
{
$memory[$matches[1]] = intval($matches[2]);
}
}// Berechnen
$memory['MemUsed'] = ($memory['MemTotal'] - $memory['MemFree'] - $memory['Buffers'] - $memory['Cached']);
$memory['SwapUsed'] = ($memory['SwapTotal'] - $memory['SwapFree']);// Und zum Test ausgeben
var_dump($memory);?>[/PHP]
Das gibt z.B. folgendes aus:Code
Alles anzeigenarray(7) { ['MemTotal']=> int(1024000) ['MemFree']=> int(57996) ['SwapTotal']=> int(3072000) ['SwapFree']=> int(2979504) ['Cached']=> int(647588) ['MemUsed']=> int(318416) ['SwapUsed']=> int(92496) }
MemUsed ist hier der wirklich genutzte Ram -
Wie kann ich mir den verbrauchten Ram eines Prozesses anzeigen lassen? ps liefert hier nur unbrauchbare Werte (siehe Understanding memory usage on Linux). Dazu hat der Benutzer FidiBus etwas interessantes geschrieben:Zitat von FidiBus;15901wer pyton installiert hat findet hier: http://www.pixelbeat.org/scripts/ps_mem.py
ein nettes script.
Der Beitrag wird vllt. noch übersichtlicher und besser formatiert.
Wird bald fortgesetzt, da fehlt auch noch einiges...