健康检查申请

时间:2010-07-05 10:28:35

标签: linux linux-kernel high-availability

我想知道检查进程运行状况的方法有哪些。考虑到在系统上 10000个进程正在运行,您必须确保在任何这些进程发生故障的情况下,我们需要启动进程。

4 个答案:

答案 0 :(得分:2)

使用进程ID(PID)并轮询进程是否仍然存在或是否定期死亡;如果它已经死了,那么就恢复它。

但是,如果您有10000个进程,则可能首先达到操作系统的进程限制。我建议你重新设计你的程序,这样你就不需要那么多的程序了。

答案 1 :(得分:1)

重新生成的进程通常通过使用特定的启动程序来执行exec()程序并等待SIGCHILD指示子进程结束来处理。

对于启动时间应用程序(服务器等),upstart之类的守护程序可以自动为您执行此操作。

答案 2 :(得分:1)

虽然其他人指出应用程序已经存在(你真的应该使用它,除非你有明确的理由不这样做),我会抛出一个自定义解决方案的随机想法。

如果你控制所有N进程,那么让它们都有一个共享内存区N位大(所以,10000进程〜1KB,不错)。在启动每个进程时,给它一个数字i,范围从0到N.每个T秒,每个进程将共享内存中的位i设置为1.监视进程可以检查所有N位是否每k*T秒为1,在此过程中将它们全部重置为0。

这仍然是O(n),你不会避免,但原语都非常快,应该可以扩展到OS线程限制。

获取i的另一个想法就是使用PID,但共享内存必须更大(尽管可能仍然可以;例如,Linux PID范围很小)。

答案 3 :(得分:0)

有一个名为monit的实用程序可以满足您的需求。但它适用于Linux中的某些重要流程。所有10000个流程都很重要!!!