我正在考虑使用 Apache 32 位Moodle在 Windows 2008 R2 64 位/16GB 服务器上安装。由于可用内存会影响可同时服务的用户数,我想知道 32 位 Windows 进程的 2GB 内存限制会如何影响 Apache+PHP。
这是针对整个服务器的集体限制,还是分别针对每个 Apache 子进程/线程应用?
如果是分开的,Windows 上会启动多少个子进程?每个请求启动一个?每个处理器核心启动一个?还是介于两者之间?这可以以某种方式配置吗?
答案1
免责声明:我不是 Windows 管理员。我认为与 Apache 2 相关的最常见的设置是使用 winnt 多处理模块 (MPM),并配置线程池大小(默认值为 250 左右)。这意味着您将拥有一个包含许多线程的单个进程,因此该进程将受到 2G 限制。
Apache2 的一个优点是它支持不同的 MPM 方案,因此您可以选择最适合的方案。这里,它很可能(或者甚至必须是 - 不确定)是 winnt MPM。
我希望这会有所帮助。——马特
答案2
首先,如果你问这个问题,你可能需要看一下不同 Windows 版本的内存限制。如果操作系统将 RAM 限制为 2 或 4 GB,则生成多个 Apache 进程对您没有多大帮助。另外,请注意,每个进程的内存限制会根据应用程序本身而变化。
其次,每个进程 2 GB 的限制适用于每个进程。任何进程最多可以分配 2 GB 的内存,无论它是否是其他进程的子进程。多线程进程仍然是进程,因此无法通过这种方式规避限制。
最后,您似乎不了解 Apache(或 Windows?)进程的工作方式。 没有针对launch [x] processes of [y] application
、 或 的全局配置[x] processes of [y] application per [z] cores
,而且您肯定不会为每个http
请求获得一个新的 Apache 进程,因此问题的这一部分有点……无法回答。 应用程序启动的进程数由应用程序(以及某种程度上的用户)定义。 例如,IE 中的每个选项卡都是其自己的进程,但 Firefox 中的每个选项卡不是。
不过,我建议,通过启动同一进程的多个实例来规避内存限制可能不是一个好主意,你应该获得一个 Windows 版本,它本身支持让你的应用程序拥有它实际需要的(或可以处理的)尽可能多的内存。想想当你(或其他人)必须排除问题时会发生什么,并进入运行 32 个 Apache 实例的 Web 服务器以“绕过”每个进程 2 GB 的限制并利用允许的最大操作系统限制 64 GB RAM。有人会被杀的。