优化 Apache 性能

优化 Apache 性能

我正在寻找方法来优化我们目前内部托管的 Web 服务器。我试图提供尽可能多的相关的信息如下。如果您需要更多信息来协助,请告诉我。

服务器运行 1 个网站,这是一个基于 Zend Framework (ver1) 构建的在线披萨订购平台。根据上个月的流量统计,每天页面加载量约为 6,000 次,主要集中在晚餐时间。该期间的峰值约为每小时 1,500 次加载。

我们最近将 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

服务器操作系统

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(替代 PHP 缓存)。SSL 模块已加载,但未使用(因为实际上不起作用,因此未使用)。有一个文件包含 MPM 模块的设置,但据我所知,它未包含在 httpd.conf 文件中,include 行已被注释掉。因此我猜想 prefork MPM 也使用默认值工作。

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

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

遇到性能问题时加载

在此处输入图片描述

注意:API 请求到后端

至于我们的在线平台,它通过 API(GET/POST)与我们的后端系统进行通信。对于购物篮的报价(缓存直到添加新商品)、产品(缓存)、产品价格(缓存)。当看到网络上出现性能问题时,后端服务器实际上正在显示真实负载。所以我更倾向于认为是 API 请求需要很长时间才能完成,从而阻碍了 Web 服务器上的客户端。所以我的问题是,上面给出的统计数据(流量/负载)和软件的当前配置。与互联网连接和硬件的规格相比,这是服务器压力大的迹象吗?我是否能够根据可用资源和 Apache 的实际占用空间增加 Web 服务器上的最大客户端数量?

答案1

网站性能是个大问题。据我所知,问题很可能不是出在 Apache 上。

不过,有一些事情可以帮助你提高表现。

  • 缓存!我不知道您在 PHP 代码中缓存了多少内容。但由于您没有使用 SSL,而且我猜您有很多只读数据,请尝试

  • 使能够mod_expires

  • 使用以下方式分析您的网站/后端 APIJMeter

答案2

不,以上并不是服务器压力过大的迹象。

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

您需要在 HTTP 后端运行一些测试,看看它是否以最大容量运行。如果是,那么您需要修复它。

供将来参考,您应该配置并使用服务器状态处理程序来监控 apache,如下所述:http://httpd.apache.org/docs/2.2/mod/mod_status.html

答案3

Apache 性能可以通过 Worker MPM 和 Prefork 设置进行调整,改变 keepalive 和最大备用线程可以帮助提高性能并减少内存占用,你可以从中找到 Prefork 和 worker 的最佳设置这里

答案4

您可能正在用尽进程(由MaxSpareServers和定义StartServers)。默认值只有 10,因此如果您的响应时间很长,那么每 2 秒处理一个请求(1500 / 小时)可能不够。

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

相关内容