Apache 2.2 mpm_worker:更多的线程或更多的进程?

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

每个的优点和缺点是什么? 在什么情况下你会增加一个呢?

到目前为止,在确定线程与进程时,这些是我的首要考虑事项:

  1. 线程将占用比进程less得多的常驻内存。 是的,通过dynamic链接库,Apache Control Process和它的subprocess之间共享大量内存,但每个新进程都需要实例化所有已启用的模块。

    这很容易通过比较每个进程的内存使用情况来进行testing,例如,每个进程有5个进程和1个线程,或者每个进程有5个进程,每个线程有25个线程。 就我而言,无论线程数量多less,每个subprocess都需要大约7 MB。

    +对于线程

  2. 加载新进程的时间和CPU周期比启动线程需要更长的时间。 这可以通过validation通过“ab”服务的平均页数来testing。

    +对于线程

  3. 一个进程线程都依赖于进程。这里最大的问题是,如果进程发生了什么事,它将影响所有与之相关的线程。 如果你正在用一堆线程运行一个进程,那么当进程死亡时,线程就会死亡。 因此,更多的过程会导致更好的分离,因此,如果您愿意的话,会有更大的“错误”容忍度。

    +对于进程

  4. 与(3)相关,对于像PHP这样的模块,其内存由Process加载并在所有线程中共享。 这意味着如果你的php的memory_limit设置为100Mbs,下面有25个线程,那么在最大负载技术上,每个线程最多可以分配4MB(当然,这样不会发生,饿死)。

所以最终,这实际上取决于你的使用情况。这就是说,你会想要最大限度地使用线程的数量,以减less内存使用情况,提高响应能力。 但是,为了更好的容错性,您必须在适当数量的进程之间进行平衡。

当然,我不是这里的专家,因为我最近才必须关注这个问题,所以我期待着看看还有什么其他的答案可以在这里popup来!