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


17

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

每种都有哪些优点和缺点?在什么情况下您会增加一个?

Answers:


25

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

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

    通过比较每个进程的内存使用情况(例如,每个进程有5个进程和1个线程,或每个有5个进程和25个线程),可以轻松地测试这一点。以我的情况而言,每个子进程大约占用7 MB,而不管线程的数量。

    +对于线程

  2. 加载新进程所需的时间和CPU周期要比线程启动花费的时间更长。可以通过验证通过“ ab”投放的平均页面数量来进行测试。

    +对于线程

  3. 进程线程全部取决于进程。这里最大的担心是,如果进程发生任何事情,它将影响与之关联的所有线程。如果您使用的是带有多个线程的单个进程,那么当进程死亡时,线程也会死亡。因此,如果您愿意的话,更多的进程将导致更好的分离,从而带来更大的“故障”容忍度。

    +对于流程

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

因此,最后,这实际上取决于您的用例。也就是说,您将需要最大化使用的线程数量,以减少内存使用并提高响应速度。但是,您必须在适当数量的进程之间进行平衡,以实现更好的容错能力。

当然我不是专家,因为直到最近我才开始对此感到担忧,所以我期待着在这里看到其他答案!


1
+1了解一些不错的一般信息。不过,我希望看到更多的深度/具体细节。
sh-beta 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.