Apache 无法处理每日 18k 次点击

Apache 无法处理每日 18k 次点击

你好,看来我的服务器无法处理高峰时段的流量,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

对于 Windows,为什么不使用像泛太平洋行动计划

WampServer 2.0h [04/16/09]
Includes : Apache 2.2.11, MySQL 5.1.33, PHP 5.2.9-2 

您也可以更改版本并运行其中任何一个的多个实例。
不过,我自己还没有尝试过。

此外,还有便携版


当您绕过 Unix 设置时,这可能是您的权宜之计。

答案4

调整 apache 中 fastcgi 进程的最大数量。听起来好像它占用了太多内存(最大进程数 * php 内存限制),并且由于无休止地交换而死机。不要将 apache 进程/线程的数量与 fastcgi/php 进程的数量混淆。

相关内容