如何减少Unix网络服务器上的内存使用量

Modified on: Mon, 24 Jun 2019 19:00:02 +0800

我目前正在使用Joyent Accelerator来托管我的webapps,并且它工作正常,但是我需要降低成本,所以我降级了我当前的计划并且施加了一些新的内存限制(256M rss,512M交换)。我昨天对他们并不太远,但是今天几次重启Apache后,我现在是411M rss,721M swap(prstat -Z -s cpu)。

在服务器故障中搜索只为我提供了许多方法和特定工具来监控服务器,但没有关于如何减少/优化其内存使用的建议。我也见过这个问题,但我不认为这对这个特殊的(或者我可以说是通用的)情况有好处。

服务器在共享CPU上运行Solaris,我正在使用Apache + MySQL + PHP堆栈。

我很想知道可以采取的措施来解决这个问题并解决问题。然而,我也没时间降低我的记忆足迹并在当前结束之前降级计划,所以任何可以制造魔法并拯救这一天的东西也是受欢迎的:)

最佳答案

感谢大家的回答!根据您的建议,我已经能够将内存使用量减少到195M SWAP和108M RSS,而无需触及我的代码(我肯定会尽快优化它,但是这应该是让我快速摆脱困境的解决方案。)

以下是我所做的事情清单:

摆脱VirtualHost条目中使用的通配符。而不是*:80和*:443,我使用了服务器的真实IP。

更改了Apache的prefork MPM。这些是我最终使用的值:

StartServers           1
MinSpareServers        1 
MaxSpareServers        5 
ServerLimit           16
MaxClients            16
MaxRequestsPerChild    0
ListenBacklog        100

这些绝不是神奇的数字。我花了一些时间尝试不同的值和组合,然后根据我的服务器的实际使用情况测试它们,每个人都应该在他们的环境中做同样的事情。为了记录,我的服务器每月接收2M pvs,以常规速率提供动态页面和资产 - 没有挖掘效果。同样的目的是减少内存占用,而不是提高性能或HA。

参考:

调整了Apache的KeepAlive。通过将KeepAliveTimeout设置为较低的值(在我的情况下为2),我可以期待更少的服务器进程只等待与空闲客户端的连接不再要求任何内容。

参考:http:// httpd。 apache.org/docs/2.0/mod/core.html#keepalivetimeout

删除了MySQL未使用的模块。我在MySQL的my.cnf中添加了skip-innodb。大量减少内存消耗。


还有一些非常好的建议,我个人无法做到:

  • 删除你不需要的PHP模块。我服务器上的PHP已经编译了大部分mod,我可能会在其他VPS上尝试我自己的最小PHP。
  • 使用php-fastcgi切换到nginx。这是我很快就会尝试的另一个好建议,但是现在我不能冒停机时间。
作者:fandelost

相关问答

添加新评论