プロセスのヘルスをチェックするために存在する方法を知りたいです。システムで 10000 プロセスが実行されていることを考慮すると、これらのプロセスのいずれかがダウンした場合にプロセスをアップにする必要があることを確認する必要があります。
4 に答える
プロセス ID (PID) を使用して、プロセスがまだ有効か無効かを定期的にポーリングします。そして死んでいる場合は復活させます。
ただし、10000 プロセスの場合、OS のプロセス制限に最初に到達する可能性があります。そもそもそれほど多くのプロセスが必要ないように、プログラムを再設計することをお勧めします。
ダウンしたプロセスの再生成は通常、特定のランチャー プログラムを使用してプログラムを exec() し、子プロセスが終了したことを示す SIGCHILD を待機することによって処理されます。
起動時のアプリケーション (サーバーなど)の場合、 upstartなどのデーモンがこれを自動的に実行できます。
他の人は、アプリケーションが既に存在していると指摘していますが (明確な理由がない限り、実際に使用する必要があります)、カスタム ソリューションのランダムなアイデアを捨てます。
すべてのプロセスを制御する場合は、すべてのN
プロセスに 1 つの共有メモリ領域をN
少し大きくします (つまり、10000 プロセス ~ 1KB、悪くありません)。i
各プロセスを開始するときに、0 から N までの範囲の番号 を与えます。毎秒、T
各プロセスはi
共有メモリのビットを 1 に設定します。監視プロセスは、すべてのN
ビットが 1であることを毎秒チェックし、すべてのビットk*T
を 0 にリセットします。プロセス。
これは依然として O(n) であり、これを回避することはできませんが、プリミティブはすべて非常に高速であり、OS スレッドの制限まで問題なくスケーリングする必要があります。
取得i
するための別のアイデアは、単に PID を使用することですが、その場合は共有メモリを大きくする必要があります (おそらくそれでも問題ありません。たとえば、Linux の PID の範囲は小さいです)。
あなたが探していることを行うmonitと呼ばれるユーティリティがあります。しかし、それはLinuxの特定の重要なプロセスのためです.. 10000プロセスすべてが重要です!!!