apache2をプロセスツリー全体(apache2およびすべての分岐サブプロセス)で使用される最大Xメモリ量ではなく、分岐された各サブワーカープロセスで使用される最大Xメモリ量に制限する方法はありますか?
cgroups / systemdを使用してソリューションを試しましたが、すべてが各サブプロセスを個別に制限するのではなく、基本プロセスとすべてのサブプロセスの組み合わせを制限します。
私はapache2だけでなく、子プロセスを生成するすべてのプロセスで動作するソリューションを探しています。
答え1
呼び出すには、アプリケーション(あなたの場合はオープンソースのApache2)のソースコードを改善するだけです。制限設定(2)通話成功後フォーク(2)しかし、電話する前に実行(2)。
setrlimit
なぜなら、あなたは本当にシステムコールを完了したいからです。後ろに(設定した内容は、シェルの組み込み機能を通じて追加のfork
呼び出しがあるまで保持されます。)setrlimit
ulimit
Linuxの仕組みをよりよく理解するために時間を費やしてください。システムコール(2)仕事(特にfork
&&execve
)setrlimit
と使用方法と時期。私は良いLinuxシステムプログラミングブックを読むことをお勧めします。アルカリ性ホスファターゼ。
したがって、使用中のすべてのプログラムをわずかに変更しない限り、達成しようとする目標はしばしば非現実的です。これUnixの哲学fork
これはこれを禁止するのデザインにインスピレーションを与えました。execve
setrlimit
もちろん、原則としては言葉にならないことをすることもできます。LD_PRELOAD
技術オーバーロード動作fork
(setrlimit
0を返した後に呼び出す)またはexecve
(setrlimit
その前にsyscallを呼び出す)動的リンク 実行可能ファイル(または自分のバリエーションをパッチするのと同じlibc.so
)しかし、これは不合理です。また、見ることができますファイル1)またはLDD(1)動的にリンクされた実行可能ファイルを検出します。
ただし、ulimit
シェル組み込み機能を使用してApache2とすべてのサブキーを制限できます。 Apache2のドキュメントを詳しく見てみると、子プロセスの設定がたくさんあります。