我正在寻找方法来优化我们目前内部托管的 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
模块来监控正在使用的进程。确保设置访问规则,以便只能在内部访问。