PHP + Apache + Windows 32位的内存限制?

我正在考虑在Windows 2008 R2 64位/ 16GB服务器上使用Apache 32位进行Moodle安装。 由于可用内存影响可以服务的用户并发数,因此我想知道32位Windows进程的2GB内存限制如何影响Apache + PHP。

是整个服务器的集体限制,还是每个Apachesubprocess/线程分别应用?

如果是单独的,那么有多less个孩子在Windows上启动? 每个请求一个? 每个处理器核心一个? 东西在中间? 这在某种程度上是可configuration的吗?

免责声明:我不是Windowspipe理员。 我相信像Apache 2这样的最常见的设置是使用winnt多处理模块(MPM),具有可configuration的线程池大小(默认值为250左右)。 这意味着您将拥有一个包含多个线程的单个进程,因此这个进程将成为受到2G限制的进程。

Apache2的一个好处就是它支持不同的MPMscheme,所以你可以select最适合的scheme。 在这里,winnt MPM很有可能(甚至可能是 – 不确定)。

我希望这有帮助。 –Matt

首先,如果你问这个问题,你可能想看看各种版本的Windows的内存限制 。 如果操作系统限制到2或4 GB的RAM,那么产生多个Apache进程对你来说不会有多大的好处。 另请注意,每个进程的内存限制是基于应用程序本身而变化的。

其次,每个进程限制2GB。 任何进程最多可以分配2 GB内存,而不pipe它是否是其他subprocess。 multithreading进程仍然是进程,所以没有任何一个方面的限制。

最后,似乎您不了解Apache(或Windows?)过程的工作方式。 对于launch [x] processes of [y] application没有全局configuration,或者[x] processes of [y] application per [z] cores没有launch [x] processes of [y] application全局configuration,并且您对每个http请求都没有获得新的Apache进程,所以这个问题的一部分是无法回避的。 应用程序启动的进程数由应用程序(和用户在某种程度上)定义。 例如,IE中的每个选项卡都是自己的进程,但Firefox中的每个选项卡都不是。

但是,我build议,通过启动同一进程的多个实例来避开内存限制可能不是一个好主意,你应该得到一个本地支持让你的应用程序拥有尽可能多的内存的Windows版本(或者可以处理)。 考虑一下当您(或其他人)必须解决问题时会发生什么情况,并进入一个运行32个Apache实例的Web服务器,以“绕过”每个进程的限制2 GB,并使用64 GB的最大允许的操作系统限制内存。 有人会被谋杀