Das werde ich wohl in mehreren Schritten schreiben.
Zu beachten ist, dass meine NAS mit 32GB aufgerüstet ist. Will man das nachspielen, muss die Beispiele etwas anpassen.
Sollte aber nicht so schwer sein. Die Liste wird später so angelegt: new_list = [True]*3*1024*1024*1024.
Hat man nur 8GB, dann teilt man einfach durch 4: new_list = [True]*3*1024*1024*256.
Docker bietet ja eine Möglichkeit Ressourcen zu limitieren. Das kann viel helfen, hat aber auch seine Fallstricke.
Ich versuche das so aufzuschreiben, dass man es selber nachspielen kann.
Was braucht man? Einen ssh Zugang auf die UGREEN und ein Python Image. Ich nutze: 3.12.9-alpine3.21
Im ersten Schritt starte ich den Python Container:
Dann werfe ich einen Blick auf die Ressourcen meiner NAS:
Alles ist flauschig.
Jetzt gehe ich per ssh auf meine NAS und benutze "docker exec" um in meinen Python Container zu kommen.
Auf der NAS mal ein "docker ps":
Und nun geht es mit "docker exec -it python-1 sh" in den Container.
Nach diesem Kommando sollte man ein "#" als prompt bekommen.
Da rufe ich mal einen "free" auf um zu sehen was ich so habe.
(Spoiler: free hilft im Container nur begrenzt, später mehr.)
Danach rufe ich python auf.
Innerhalb von python kann man dann eine Liste anlegen, die sich viel Speicher greift.
Der Befehl dazu ist wie folgt:
new_list = [True]*3*1024*1024*1024
Und [True] belegt 8Byte im Speicher und ein bisschen Overhead
Alles zusammen sieht dann so aus.
Jetzt ein Blick auf den Taskmanager.
Autsch. Ich hatte doch gerade noch fast 32GB.
Was wird wohl passieren wenn ich noch mal eine kleinere Liste allokiere?
Das wären 8GB: new_list_1 = [True]*1*1024*1024*1024
Dann ein Blick auf den Taskmanager der NAS.
Da stehen jetzt nur 30GB? Vorher waren es doch 25GB. Da fehlt ja was.
Erwartet hätte ich 25GB + 8GB = 33GB. Und ich habe ja nur 30GB! Wo ist das hin?
Einige werden schon befürchten was passiert ist. Das System hat angefangen zu swappen.
Das ist nicht gut, weil ständig Teile des Rams auf die Festplatte ausgelagert werden.
Das macht das System nicht wirklich schneller. Und geht auf (u.U.) auf die Lebenszeit der ssd.
Hier zum Beweis noch ein free im Container
Hier kann man sehen was ein Container auf einem NAS anrichten kann.
Und es eine gute Idee ist die Begrenzung der RAM-Nutzung für einen Container zu limitieren.
Kann man sogar in der Docker APP von Ugreen tun.
Aber man muss die Kirche im Dorf lassen. Die meisten Container benehmen sich sehr anständig.
Aber wer hat nicht schon was von den berühmten "memory leaks" gehört?
Man sollte es einfach kennen.
Im nächsten Teil zeige ich dann, warum das die Limitierung des Speichers zwar hilfreich ist, aber kein Allheilmittel.
Es hilft nicht immer und man hat dann neue Probleme . Die aber nicht so schlimm sind wie das Swappen.