我的 apache 配置有问题。目前,nginx 作为反向代理位于 apache 前端,提供静态资产,然后将 php 请求传递给 apache。Apache 正在使用 mod_php。我们确实有用户,但网站增长缓慢,所以我知道 Mysql 不是罪魁祸首。该网站不是数据库密集型网站,而是 Web 服务密集型网站。
该网站正在缓慢发展,本月我们将拥有约 430,000 个独立访客,并且可以同时容纳 80-230 人,但每秒的请求数实际上从未超过 8 个。
Apache 似乎占用了大量内存,大约一周后会导致服务器崩溃并需要重新启动。该服务器是一台 linode 8 核、8 GB ubuntu 12.04 机器。
这是当前配置我们现在使用 Prefork 模块:
Timeout 15
KeepAlive Off
MaxKeepAliveRequests 1000
KeepAliveTimeout 5
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 256
MaxRequestsPerChild 500
</IfModule>
HostnameLookups Off
如果您需要更多信息,请告诉我。我们是否可以减少 prefork 模块的内存使用量并获得更好的性能?
答案1
关于您的容量规划:如何对网站进行负载测试和容量规划?
至于内存泄漏,如果子进程在 500 个请求后正常终止,Apache 就不应该泄漏内存。您的 PHP 代码(及其依赖的库)可能存在细微差别,导致子进程无法正常终止或消耗过多的内存。
尝试找到内存使用量或创建时间比其他进程大得多/更早的进程。lsof -pPID
如果您幸运的话,可能会为您提供提示,但更有可能的是,您接下来会遇到一些无趣的调试。
(当然,这是假设 Apache 是罪魁祸首 —— 我理所当然地认为你已经以某种方式证明了这一点)