私はcmds
Python でスレッドを使用して複数のターミナルを実行しています (笑わないでください、理由があります)。
これらによりcmds
、使用可能なメモリが圧倒されることがあり、メモリ不足 (OOA) エラーを回避するためにスワップ サイズを増やす必要がありました。
私の質問は次のとおりです:一般的に、スレッドを減らしてスワップ領域を増やすか、スレッドを増やしてスワップ領域を減らすと、私のプログラム (または任意のプログラム) の完了が速くなりますか (または「スイート スポット」はありますか)?。
答え1
これらのコマンドは使用可能なメモリを圧倒することがあり、メモリ不足 (OOA) エラーを回避するためにスワップ サイズを増やす必要がありました。
スワップ領域が不足している (またはスワップ サイズを増やす必要がある) ということは、一度に実行しているプロセスが多すぎるということになります。
私の質問は、一般的に、スレッドを減らしてスワップ領域を増やすか、スレッドを増やしてスワップ領域を減らすと、私のプログラム (または任意のプログラム) の完了が速くなるでしょうか (または「スイート スポット」があるでしょうか)?
2 つのオプションは、実際には意味がありません。スレッド数 (したがって必要な RAM) を増やし、同時にスワップ サイズを減らすと、メモリ (RAM とスワップの両方に保存されている) が不足し、オペレーティング システムによってプロセスが終了されたり、メモリ割り当てが失敗したりする可能性があります。
RAM が不足すると、オペレーティング システムはメモリをディスク (スワップ領域) に書き込んでメモリの一部を解放します。これは比較的時間のかかる作業なので、RAM で使用可能なメモリ以上のメモリを使用することは避けてください。
RAM が不足しないように、またディスクにメモリを書き込まないように、プロセスの数を制限します。psutil.virtual_memory().available
別のプロセスを開始する前に、使用可能なメモリを確認してください。別のプロセスを開始する前に 1GB 確保しておくのが妥当と思われます。
ベンチマークを実施する必要があります。つまり、最大プロセス数と最小メモリの値を変えて、さまざまなソース ファイルを完了するのにかかる時間を計測し、その後別のソース ファイルを開始します。