我正在一台古老的 Blue & White G3/300 上运行一个业余网络服务器,该服务器运行 Debian PPC Squeeze 2.6.30。重启后,性能暂时还不错,但最终变得越来越慢。目前,它已经正常运行了 76 天,主要原因似乎是 10 多个 apache2 进程的内存使用量。
StartServers
我想我需要降低、MinSpareServers
和/或的值MaxSpareServers
,但我不确定要调整哪一个,并且每个值都有三个部分,具体取决于正在使用哪个 mpm 模块。
我如何知道需要更改以下哪些部分,以及考虑到该盒子有 448 MB 的物理内存(每个 64、128 和 256 条内存的奇怪升级历史),一些合理的值是什么?
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
我的 apache2.conf 中没有任何其他 StartServers 实例,但是这些 mpm 模块均未出现在mods-available
或中mods-enabled
。有什么想法吗?
谢谢!
答案1
如今,400MB 对于 Web 服务器来说并不算多——您可能需要考虑更换服务器:)
也就是说,如果您的内存使用量激增,则可能是某个地方存在内存泄漏——进行快速测试,查看当前 httpd 进程的大小,然后停止/启动 Apache,看看它们是否小了很多。如果是,观察几天,看看它们是否会增长。
如果是内存泄漏真实的解决方案是找到并修复内存泄漏,但由于这通常很麻烦,您也可以调整MaxRequestsPerChild
为 0(无限制)以外的值。当 Apache 工作进程处理了固定数量的请求后,这将终止它们(迫使它们在进程中放弃泄漏的内存)。
从较大的值开始(几千左右),然后逐渐减小到几百。如果每个子进程的请求数低于 100,则内存泄漏就足够大了,需要确实修复了它因为不断杀死并重新生成 Apache 工作者会对性能造成巨大影响。
回复:要调整哪个 mpm,答案几乎肯定是prefork
。
您可以运行httpd -V
并查找Server MPM:
可以肯定地告诉您的行。
答案2
为了确定 apache 进程的内存使用情况,您需要调整 MaxClients。
常见的经验法则是:(所需最大内存)/(1 个 Apache 进程的内存使用量)= 最大客户端数
最后你还需要调整你的最大备用服务器数<=最大客戶端。
一个进程的内存使用量很大程度上取决于您加载的模块(php 等等),因此您可能需要将最大客户端数量设置得稍微低一些。