好的,我的运行在 ubuntu 9.04 vps 上的网站时常会出现崩溃的情况,因为 apache 似乎没有响应。
简单的 apache 重启可以解决这个问题,但显然每次发生这种情况时都必须手动重启服务器不是一个好的情况。
该网站是一个流量最小的 wordpress 网站(每天最多 200 名访问者),我还以 apache mod 的形式运行 php,并设置了 APC 缓存。
我删除了一些正在服务器上运行的进程,比如 clamav,这在一定程度上减少了内存使用量(服务器有 0.5GB 的 RAM)。
用户报告说,在 Apache 响应之前看到“内存不足”错误。
现在在服务器上运行 top 命令显示内存使用量约为 50%。
apache 错误日志也没有显示任何有趣的内容。
但运行 top 命令显示有 4 个不同的 apache2 实例正在运行 - 每个实例消耗大约 15% 的内存。cpu 为 0%
有人能解释为什么有 4 个单独的 apache 进程正在运行以及如何正确管理这些进程吗?
谢谢大家。
埃德
答案1
但运行 top 命令显示有 4 个不同的 apache2 实例正在运行 - 每个实例消耗大约 15% 的内存。cpu 为 0%
您可能看到的是 Apache 及其子进程已准备好处理请求。您很可能不需要管理这些进程(除了确保您的服务器负载不要太高)最大客户数定义,因此突然的流量高峰不会耗尽所有可用的 RAM 和其他资源)。
相反,您需要找出占用如此多内存的原因 - Apache 本身肯定不是最轻量级的 Web 服务器,但它也没有那么重。很可能是某些原因导致 PHP 占用大量内存;也许您为 APC 定义了非常高的内存限制?
此外,在流量如此低的情况下,您确定真的需要 APC 吗?对我来说,RAM 似乎是服务器中最薄弱的环节,因此删除目前安装的所有消耗 RAM 的扩展是有意义的。
以下是我给您的建议:
1)启用 APC 来对网站进行基准测试,例如围城- 它在 Ubuntu 存储库中可用,因此apt-get install siege
应该安装它。让它运行一段时间,查看结果,并查看 siege 是否会击落您的 Apache。
2) 禁用 APC,重复测试。如果结果与上一次类似或更好,并且/或者 Apache 顺利通过了此测试且没有耗尽内存,则暂时不要使用 APC 运行您的服务器。
如果您想尝试完全不同的路线,lighttpd 与 fcgi 是一种更轻量且更可控的组合。在这种情况下,lighttpd 仅服务器 http 请求,而 PHP 解析则在 fcgi 后端完成。您可以定义有多少个 fcgi 后端进程正在等待,因此即使流量突然激增也不会占用太多 RAM,在最坏的情况下,它会使网站变慢或导致一些“500 服务器太忙”错误,但您无需重新启动任何程序。