Windows下Apache模块配置 mpm_winnt_module

时间:2022-09-16 23:26:22

Windows下Apache模块配置 mpm_winnt_module。来自xwamp。

Windows下Apache的运行模块一般为winnt,是专门针对Windows NT优化的MPM(多路处理模块),它使用一个单独的父进程产生一个单独的子进程,在这个子进程中轮流产生多个线程来处理请求。也就是说 mpm_winnt只能启动父子两个进程, 不能像Linux下那样同时启动多个进程。以下为默认配置:

<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxConnectionsPerChild 0
</IfModule>

  • ThreadsPerChild:constant number of worker threads in the server process。线程数量。一般来说线程数量越大,能够更好的处理更多并发连接。

  • MaxConnectionsPerChild:maximum number of connections a server process serves。累计最多处理到多少个请求,超过该值会自动重启Apache。设置为0,则不限制,但是有可能会照成内存泄漏。

  • MaxMemFree:MaxMemFree指令用于设置主内存分配程序在未调用free()的情况下允许持有的最大*内存数量(KB)。若未设置或设置为"0",将表示无限制。 MaxMemFree的默认值为2048。一般不需要配置。

可能的错误

Apache出现以下日志:

指定的网络名不再可用。  : winnt_accept: Asynchronous AcceptEx failed.

需要加上配置:

Win32DisableAcceptEx 

AcceptEx()是一个微软的WinSock2 API ,通过使用BSD风格的accept() API提供了性能改善。一些流行的Windows产品,比如防病毒软件或虚拟专用网络软件,会干扰AcceptEx()的正确操作。如果你遇到类似于如下 的错误:一般的解决办法是关闭 AcceptEx()。

建议不要安装一些服务器安全软件(主要是国产的)。反正我是不安装,我的所有服务器从来没有出现过上面的错误。

一些总结

  • 如果性能没有问题的话,就使用这个默认的配置。

  • 如果想设置MaxConnectionsPerChild大于0的话,可以设置为ThreadsPerChild的100倍,不要设置的太小。如何判断是否太小?查看Apache的错误日志,计算一下Apache重启的时间间隔,尽量不要低于1个小时(根据个人喜好,频繁重启Apache一般来说不太好)。