たとえば、apache httpd は MaxConnectionsPerChild ディレクティブを提供します。このディレクティブは、サーバーが古いプロセスを強制終了して新しいプロセスを起動することによってプロセスをリサイクルする頻度を制御します。
特定の数の接続を提供した後、古いスレッドをまったく強制終了する理由は何ですか。
これはCPUキャッシュを不必要に冷やしませんか?
たとえば、apache httpd は MaxConnectionsPerChild ディレクティブを提供します。このディレクティブは、サーバーが古いプロセスを強制終了して新しいプロセスを起動することによってプロセスをリサイクルする頻度を制御します。
特定の数の接続を提供した後、古いスレッドをまったく強制終了する理由は何ですか。
これはCPUキャッシュを不必要に冷やしませんか?
ドキュメントから:
MaxConnectionsPerChild をゼロ以外の値に設定すると、(偶発的な) メモリ リークによってプロセスが消費できるメモリの量が制限されます。
したがって、リクエストごとに 1 MB リークしている場合 (malloc()
ただし ではありませんfree()
)、使い果たされて apache が強制終了されるまで、徐々にメモリを使い果たしていきます。しかし、 を設定するMaxConnectionsPerChild 100
と、子供は徐々に最大 100 MB のメモリを使用し、その後強制終了されて 0 に戻ります。
ここでは「ホット キャッシュ」が適用されます。MaxConnectionsPerChild を設定すると、Apache が遅くなります。そのため、デフォルトは無限です。MaxConnectionsPerChild は、メモリ リークに対する洗練されていないダクトテープを意味します。時間に追われているプログラマーは、1 週間かけて malloc() 呼び出しを探すよりも、MaxConnectionsPerChild の設定に 1 分間費やすことを好むかもしれません。