我们在 Windows Server 2003 上运行着 Apache 2.2.18,当访问者数量很多时,Apache 似乎会变得越来越慢,最后完全停滞。
有谁知道为什么会这样吗?
该服务器基于云,配备 4GB RAM
.conf 文件位于此处pastebin.ca/2070217
答案1
Apache 是一个猛兽。在默认设置下,它是一个丑陋的野兽。发布 httpd.conf,这里的某个人将能够更好地为您提供相关的优化提示。
答案2
定义“大量访客”?
您检查过日志吗?
对你的服务器进行了基准测试吗?
您确定是 Apache 导致了挂起,而不仅仅是在 Apache 上运行的基于 Web 的应用程序吗?
我认为你的问题缺乏适当的信息来给出可靠的答案。
答案3
Windows 上的 Apache 使用基于线程的模型,除非您更新这些值,否则默认为 64 个线程。每个线程处理 1 个连接。
我的WampDeveloper 专业版配置设置如下:
(C:\WampDeveloper\Config\Apache\extra\httpd-mpm.conf)
ThreadsPerChild 256
ThreadLimit 384
然后确保 KeepAlives 已设置,但设置得较低...
(C:\WampDeveloper\Config\Apache\extra\httpd-default.conf)
KeepAlive On
KeepAliveTimeout 1
进行更改并重新启动 Apache。
检查您的“/server-status”和“/server-info”URL(如果您正在使用其他 wamp 包,则可能需要取消注释 httpd.conf 中的某些行以启用这些 URL)。
第一个 URL 将显示所有连接及其状态。第二个 URL 将显示已加载的配置值。
然后编辑 php.ini 并设置合理的输出缓冲值:
output_buffering = 4096
如果值为“On”,则可能在脚本结束之前不会向客户端发送任何内容,并且会让您的页面看起来需要很长时间才能加载。
也可以尝试:
- 使用 mod_php 代替 CGI
- 使用 PHP 操作码缓存,例如 eAccelerator 或 APC。
- 注释掉 httpd.conf 中的以下更改:
EnableMMAP 关闭
EnableSendfile 关闭
Win32DisableAcceptEx
请注意,速度变慢可能是由于 PHP 代码编写/开发不佳,导致处理速度缓慢,或者导致每个 Apache 线程的大小增加(通过 PHP 读取/传递可下载文件会产生这种效果)。