我运行一个网络服务器,托管大约 6-7 个网站。这些网站中的大多数都从托管在同一台服务器上的 MySQL 获取内容。每天的平均流量约为 500-600 个独立访问者,每周的点击量约为 15 万次。
但出于某种原因,网站有时会发送超时,或者网站有时不会加载所有图像。我知道我可能应该将静态内容与动态内容分开,但目前我认为这是不可能的。
我将非常感激任何关于如何提高 apache 性能的建议,以便它不会一直超时。
服务器正在运行 Sempron LE 1300;2.3GHz,512K 缓存,2GB RAM,10Mbps/1Mbps
服务: MySQL、ProFTPD、Apache。
Private + Shared = RAM used Program
----------------------------------------------------
1.2 MiB + 54.0 KiB = 1.2 MiB proftpd
4.1 MiB + 23.0 KiB = 4.1 MiB munin-node
20.8 MiB + 120.5 KiB = 20.9 MiB mysqld
47.3 MiB + 9.9 MiB = 57.3 MiB apache2 (22)
top: Mem: 2075356k total, 1826196k used, 249160k free,
Timeout 35
KeepAlive On
MaxKeepAliveRequests 300
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 20
MaxSpareServers 20
MaxClients 60
MaxRequestsPerChild 1000
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
答案1
听起来好像服务器/线程可能不够。你检查过你的 apache 错误日志或系统日志吗?如果我没记错的话,它应该会告诉你需要增加什么资源。
另外,我看到你给了我们你的 prefork 和 worker mpm 设置。看看这个问题的答案我如何知道 apache 是作为 prefork 还是 worker 运行?关于如何找出您正在使用哪个 mpm。
答案2
虽然如果不看 Apache error_log 就很难确定,但如果您在一个只有 1Mbit 上传带宽的 Internet 连接上托管了六七个网站,我会感到担心。我猜想这要么是在一间非常小的办公室,要么是在您自己的家里。虽然 1Mbit 可能足以满足您的流量预期,但 1Mbit 连接是导致网站间歇性加载问题的原因,这听起来相当合理。
我建议将您的网站外包给专业的网络托管商,或者从 Linode 或 Slicehost 等提供商处购买低成本的基于 Xen 的 VPS。
至少,确保您的 DNS 由专业人员托管且由外部托管。
如果问题不在于您的互联网,那么我的第二个想法就是 Apache 内存不足。带有 mod_php 的 Apache 占用大量内存,每个进程最多消耗 50MB 的内存。再加上 Apache 默认的 KeepAlive 设置 15 秒,您可能会耗尽内存,具体取决于您分配了多少 SWAP 空间。
我个人会选择 lighttpd 或 nginx fastcgi 异步事件驱动模型,它可以在使用一小部分内存的情况下处理更多的连接。
希望这可以帮助。