你好,看来我的服务器无法处理高峰时段的流量,Apache 似乎崩溃了。
以下是有关服务器的一些信息:
- 至强 5110 @ 1.6GHz
4GB 内存
Windows 2003 服务器
- 适用于 Windows 的 Apache 2.2.11
- mod_fcgid(来自 apachelounge.com)
- 安装了 eAccelerator 的 PHP 5.2
- 它还运行 MySQL 5.0
它还运行 Mediawiki、Joomla、Wordpress 和 Drupal 等 PHP 应用程序,每天的点击量约为 18k。
以下是 httpd.conf 中的一些重要配置:
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 300
#
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100
#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 15
##
## Server-Pool Size Regulation (MPM specific)
##
# WinNT MPM
# ThreadsPerChild: constant number of worker threads in the server process
# MaxRequestsPerChild: maximum number of requests a server process serves MaxClients 125
#<ifModule mpm_common>
#MaxClients 140
#</IfModule>
<IfModule mpm_winnt.c>
ThreadsPerChild 250
MaxRequestsPerChild 0
</IfModule>
### END
以下是 php.ini 中 eAccelerator 的配置:
[eAccelerator]
extension="eaccelerator.dll"
eaccelerator.shm_size="64"
eaccelerator.cache_dir="C:\Temp\eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
accelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys = "shm"
eaccelerator.sessions = "shm"
eaccelerator.content = "shm"
eaccelerator.debug="0"
我知道在 Windows 机器上运行 Apache 是非常错误的,但我暂时必须忍受这一点(不幸的是,这不是我的决定)。
我的配置有问题吗?有没有解决方案可以让服务器处理负载?任何帮助我都会很感激。提前致谢!
答案1
Apache 不是你的问题;它无需任何调整就能处理大量负载。问题在于你的应用程序(也可能是你的数据库)。对于预打包的 PHP 应用程序中的糟糕代码,你无能为力,但很少需要花太多精力进行数据库调优和架构。我会首先查看这些方面(记录和优化慢查询,根据工作负载和可用内存调整数据库内存使用情况等)。
答案2
在 Windows 下,最好使用 IIS 和 fastCGI。这样可以重复使用 CGI 进程,而不会让它们大量运行。这可能会降低性能。IIS 团队有一个指导安装 fastCGI
答案3
答案4
调整 apache 中 fastcgi 进程的最大数量。听起来好像它占用了太多内存(最大进程数 * php 内存限制),并且由于无休止地交换而死机。不要将 apache 进程/线程的数量与 fastcgi/php 进程的数量混淆。