Ich betreibe mehrere Terminals cmds
mit Threads in Python (machen Sie sich nicht über mich lustig, es gibt einen Grund).
Diese cmds
überfordern manchmal den verfügbaren Speicher und ich war gezwungen, meine Swap-Größe zu erhöhen, um Out of Memory (OOA)-Fehler zu vermeiden.
Meine Frage ist:Wird mein (oder irgendein) Programm im Allgemeinen schneller abgeschlossen, wenn ich die Anzahl der Threads reduziere und den Swap-Speicherplatz erhöhe oder die Anzahl der Threads erhöhe und den Swap-Speicherplatz reduziere (oder gibt es einen „Sweet Spot“)?.
Antwort1
Diese Befehle überfordern manchmal den verfügbaren Speicher und ich war gezwungen, meine Swap-Größe zu erhöhen, um Out of Memory (OOA)-Fehler zu vermeiden.
Wenn der Swap-Speicherplatz knapp wird (oder Sie die Swap-Größe erhöhen müssen), weiß ich, dass Sie zu viele Prozesse gleichzeitig ausführen.
Meine Frage ist: Wird mein (oder irgendein) Programm im Allgemeinen schneller abgeschlossen, wenn ich die Anzahl der Threads reduziere und den Swap-Speicherplatz erhöhe oder die Anzahl der Threads erhöhe und den Swap-Speicherplatz reduziere (oder gibt es einen „Sweet Spot“)?
Die beiden Optionen machen nicht wirklich Sinn. Wenn Sie die Anzahl der Threads (und damit den erforderlichen RAM) erhöhen und gleichzeitig die Swap-Größe verringern, wird Ihnen wahrscheinlich der Speicher ausgehen (sowohl im RAM als auch im Swap), was dazu führt, dass Prozesse von Ihrem Betriebssystem beendet werden und/oder die Speicherzuweisung fehlschlägt.
Wenn der Arbeitsspeicher knapp wird, gibt Ihr Betriebssystem etwas davon frei, indem es Speicher auf die Festplatte schreibt (Auslagerungsspeicher). Dies ist eine relativ zeitaufwändige Aufgabe, daher sollten Sie unbedingt vermeiden, mehr Speicher zu verwenden, als in Ihrem Arbeitsspeicher verfügbar ist.
Ich würde die Anzahl der Prozesse begrenzen, damit Ihnen nicht der RAM ausgeht und Sie nicht auf die Festplatte schreiben müssen. Überprüfen Sie den verfügbaren Speicher, psutil.virtual_memory().available
bevor Sie einen anderen Prozess starten. 1 GB Speicher vor dem Starten eines anderen Prozesses zu haben, scheint sinnvoll.
Sie sollten einige Benchmarking-Vergleiche durchführen: Messen Sie die Zeit, die zum Abschließen verschiedener Quelldateien mit unterschiedlichen Werten für die maximale Anzahl an Prozessen und den minimalen Speicher benötigt wird, bevor Sie eine weitere starten.