ero*_*ppa 1 performance lamp mpm-prefork apache-2.2
我们有一个 LAMP 设置,当 Apache 服务器(MySQL 服务器不在这个机器上)刚刚开始死机时,它已经运行了半年。随着时间的推移,它似乎已经开始产生越来越多的进程。最终它会消耗所有内存,服务器就会死掉。我们正在使用预分叉。
与此同时,我们只是不断增加 RAM,并将 MaxClients 和 ServerLimit 参数增加到 512。但我们只是延长了崩溃时间。这个数字还在缓慢上升。也许有一天,它会达到那个极限。
到底是怎么回事?我们每秒只有大约 15-20 个请求。我们有 1 GB 的内存,但还没有使用一半。没有进行交换。
为什么 Apache 创建越来越多的进程?几乎就像某处有泄漏一样!
数据库框很好,它们不会导致请求延迟。我们测试了一些查询一切都很快!
小智 7
[为了其他人在这个老问题上绊倒的利益......]
快速回答:
检查KeepAlive
apache2.conf 或 httpd.conf 文件中的设置。设置您的KeepAliveTimeout
2-5 秒之间。
细节:
我发现默认情况下 Apache 的KeepAlive
ison
并且KeepAliveTimeout
设置为15
秒。这意味着单个用户的页面点击将导致服务器等待同一用户请求另一个页面/资源 15 秒,然后它放弃并处理其他人的请求。
当用户请求初始 index.html 文件,然后在一两秒后请求链接的 CSS、javascript 和图像文件时,此设置非常有用。然而,现代计算机和网络/互联网连接意味着浏览器通常会在不到 2 秒的时间内请求链接资源。Apache 将为这些后续页面提供服务,然后再等待 15 秒,以防用户需要其他内容。这在高流量环境中是非常低效的。
如果您每秒收到 15 个唯一连接,并且每个连接都保持活动状态 15 秒……我相信您可以很快看到事情将如何变得非常严重。您将有 225 个 Apache 进程启动,其中 90+% 完全空闲,等待打开连接上的另一个页面请求。
我已经看到许多建议将您的KeepAliveTimeout
时间设置在 2 到 5 秒之间。我自己,我将一些服务器设置为低至 2,而其他服务器设置为 5。当我再遇到流量高峰时,我不会收到相同的系统减速。
归档时间: |
|
查看次数: |
4659 次 |
最近记录: |