![Apache 2.4 或 CentOS 上的简单错误](https://linux22.com/image/667058/Apache%202.4%20%E6%88%96%20CentOS%20%E4%B8%8A%E7%9A%84%E7%AE%80%E5%8D%95%E9%94%99%E8%AF%AF.png)
我已经处理这个问题好几天了,最后我得出结论,这肯定是一个 bug... 很不幸。我希望借助您的专业知识,我可以确定这是 Apache、CentOS 7 还是其他什么东西上的 bug。
我有一个全新安装的 CentOS 7,带有 LAMP。Apache 的最新版本是 2.4,使用 prefork 作为 MPM。我可以重现“错误”的服务器有 2 GB 的 RAM 和 256 MB 的交换分区,并运行 2 个 vCPU。这个错误不会发生在 CentOS 6 上,所以我认为这个错误是 CentOS + Apache 的混合体,不知道哪个是罪魁祸首。
这就是问题所在:当我启动 Apache 时,一切都运行正常,几秒钟后,进程httpd
开始无缘无故地使用交换内存 - 我稍后会告诉你我是如何知道这一点的。我的第一个想法是内存不足。所以我执行了free
,令我惊讶的是,我看到的是:
您说得对,有 1.8 GB 的可用 RAM,而我的服务器由于某种奇怪的原因正在交换。因此我执行top
-> F -> 添加了 SWAP 字段。这是我得到的结果:
是的,只有 Apache 需要交换。因此我检查了一下,httpd.conf
并将默认值更改为以下值,这有助于减少交换使用量:
KeepAlive Off
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 60
MaxRequestWorkers 60
MaxConnectionsPerChild 4000
</IfModule>
通过上述配置,在具有大量可用内存的网络服务器中一切都应该正常工作。
这是一个非常容易重现的“错误”,我想很多人都应该遇到过它......不仅仅是我......那么为什么在我搜索的所有论坛上都没有人发布过这样的内容呢?
是的,当然,有很多教程告诉您如何调整 apache,服务器上的其他东西如何导致这种交换...是的,很难过...但是上面这个案例非常清楚,没有什么花哨的,可能周围有很多好人正在为此而烦恼,不知道是什么导致了他们的服务器交换。
值得一提的是,在重现此错误时,此服务器并非“空闲”,我让它每分钟接收几百个请求,以便检查此错误。需要注意的是,这些请求始终非常“轻量”,服务器始终有 1.8 GB 的可用 RAM。