Apache 2.2 mpm_worker:更多线程还是更多进程?

Apache 2.2 mpm_worker:更多线程还是更多进程?

在 Apache 中使用 Worker MPM 时,您可以调整子进程的数量以及每个子进程的服务器线程数。

每种方法的优点和缺点是什么?在什么情况下你会增加其中一种或另一种方法?

答案1

到目前为止,在确定线程与进程时,我主要考虑以下几点:

  1. 线程占用的常驻内存比进程少得多。是的,使用动态链接库,Apache 控制进程及其子进程之间共享大量内存,但是每个新进程都需要实例化您已启用的所有模块。

    这一点很容易测试,只需比较每个进程的内存使用情况即可,例如,每个进程有 5 个进程和 1 个线程,或者每个进程有 5 个进程和 25 个线程。在我的例子中,无论线程数量有多少,每个子进程大约占用 7 MB 内存。

    +对于线程

  2. 就时间和 CPU 周期而言,加载新进程所需的启动时间比加载线程所需的启动时间更长。可以通过验证“ab”提供的平均页面数量来测试这一点。

    +对于线程

  3. 进程线程都依赖于进程。这里最大的担忧是,如果进程发生问题,将影响与其相关的所有线程。如果您运行的是带有一堆线程的单个进程,那么当进程终止时,线程也会终止。因此,进程越多,分离效果越好,因此“容错”能力就越强。

    +针对流程

  4. 与 (3) 相关,对于 PHP 等模块,它们的内存由进程加载并在所有线程之间共享。这意味着,如果您将 php 的 memory_limit 设置为 100Mbs,并且下面有 25 个线程,那么在最大负载下,从技术上讲,每个线程最多可以分配 4MB(当然不会这样,有些会占用,有些会不足)。

所以最终,这真的取决于您的使用情况。话虽如此,您需要最大化使用的线程数量,以减少内存使用量并提高响应能力。但是,您必须平衡线程数量和适当数量的进程,以实现更好的容错能力。

当然,我不是这方面的专家,因为我最近才开始关注这个问题,所以我期待看到这里还会出现什么其他答案!

相关内容