优化Apache性能

我正在寻找方法来优化我们当前托pipe的Web服务器。 我正在努力提供以下相关信息。 请让我知道,如果你需要额外的信息,以协助。

服务器运行1个单一的网站,这是一个build立在Zend Framework(ver1)上的在线比萨订购平台。 在上个月的stream量统计上,每天大约有6000个页面,主要集中在晚餐时间。 在此期间大约有1500个负载/小时高峰。

我们最近从2 / 2mbit的aDSL线升级到100 / 100mbit的光纤,我们在晚餐时间仍然有性能问题。 我们认为2mbit是问题。 网站在低负载时段非常活跃。

硬件

CPU: Intel(R) Xeon(R) CPU 5160 @ 3.00GHz (3000.13-MHz K8-class CPU) Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free Swap: 16G Total, 468K Used, 16G Free (6GB physical, 16GB swap) Filesystem Type Size Used Avail Capacity Mounted on /dev/ad7s1a ufs 4.8G 768M 3.7G 17% / devfs devfs 1.0K 1.0K 0B 100% /dev /dev/ad7s1g ufs 176G 5.2G 157G 3% /home /dev/ad7s1e ufs 4.8G 2.8M 4.5G 0% /tmp /dev/ad7s1f ufs 19G 3.5G 14G 19% /usr /dev/ad7s1d ufs 4.8G 550M 3.9G 12% /var 

服务器OS

 FreeBSD 8.2-RELEASE 

软件

 apache-2.2.17 php5-5.3.8 mysql-server-5.5 

Apache足迹 (例子,取自#top)

 31140 www 1 45 0 377M 41588K lockf 2 0:00 0.00% httpd 31122 www 1 44 0 375M 35416K lockf 2 0:00 0.00% httpd 31109 www 1 44 0 375M 38188K lockf 2 0:00 0.00% httpd 31113 www 1 44 0 375M 35188K lockf 2 0:00 0.00% httpd 

Apache正在使用prefork MPM,APC(可选PHPcaching)。 SSL模块被加载,但没有被利用(因为在真的不工作,因此没有使用)。 有一个包含MPM模块设置的文件,但是当我看到它不包含在httpd.conf文件中时,include行被注释掉了。 因此我猜测prefork MPM也是默认值的工作。

以下是我发现的其他一些Apache conf值 – 包含在https.conf中

 Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 UseCanonicalName Off HostnameLookups Off 

遇到性能问题时加载

在这里输入图像说明

注意:API请求到后端

至于我们的在线平台,它通过API(GET / POST)与我们的后端系统进行通信。 对于篮子上的报价(caching直到添加新项目),产品(caching),产品价格(caching)。 而后台服务器实际上显示在网上apear性能问题时的实际负载。 所以我更加努力地想要完成API请求,从而阻止客户端访问Web服务器。 所以我的问题是,上面给出的统计数据(stream量/负载)和软件的当前configuration。 与互联网连接和硬件的规格相比,这是一个强调的服务器的迹象? 而且,根据可用的资源和Apache的实际占用空间,我是否能够增加Web服务器上的最大客户端数量?

网站的performance是一个很大的课题。 从我看到的问题很可能不是Apache。

有几件事可以帮助你改善你的performance。

  • caching! 我不知道你的PHP代码有多lesscaching。 但是,由于您不使用SSL,而且我猜测您有很多只读数据,请尝试使用Varnish

  • 启用mod_expires

  • 用JMeterconfiguration您的网站/后端API

不,以上都不是一个强调的服务器的迹象。

虽然您可能正在经历networkingI / O饱和(因为您没有提供实际的数据),但在高峰时段发生的实际请求太less,这种情况极不可能发生。

您需要在HTTP后端运行一些testing,看看它是否以最大容量运行。 如果是,那么你需要修复这个问题。

为了将来的参考,你应该configuration和使用服务器状态处理程序来监视Apache,如下所述: http : //httpd.apache.org/docs/2.2/mod/mod_status.html

使用Worker MPM和Prefork设置可以调整Apache的性能,改变keepalive和最大的备用线程可以帮助提高性能,减less内存占用。您可以从这里findPrefork和worker的最佳设置

您可能用完了进程(由MaxSpareServersStartServers定义)。 缺省值仅为10,所以如果您的响应时间很长,那么对于每2秒钟(1500次/小时)的请求,这可能是不够的。

打开server-status模块以监视正在使用的进程。 确保您设置访问规则,以便只能在内部访问。