(来源:fileden.com)
这是我今天在一个闲置的未完成的 cms drupal 站点上使用的屏幕截图,除了核心之外最多添加了 14 个模块,没有活动或用户。
正如你所看到的,我已经达到了极限,这太疯狂了,所以我需要限制 apache、mysql 和 php 的内存使用,因为我的 VPS 是最小的,应该适合我当前的需求。
我的系统文件 my.cnf 没有我在其他地方看到的参数列表,但这个文件显然会减少内存的使用,以及我读过的其他内容,例如内存泄漏和 apache MPM Workers vs apache prefork 其中似乎是我所拥有的。
那么如何在不删除 apache 或 php5 的情况下显着减少内存使用呢?
我使用的是 mysql 版本 5.1.66,看起来像 innodb 并显示变量 yabbit.net/mysql.txt
答案1
我怀疑你的 Apache 配置是罪魁祸首,而不是你的 MySQL 配置。当前的 MySQL 设置不应使其总计超过 50MB(我认为通常更低)。
然而,从您在评论中发布的 Apache 配置以及您的 VPS 仅提供 256 MB 内存这一事实来看,我发现以下设置
MaxClients 256
对于 Prefork MPM 来说是方式对于这样的机器来说太多了。在我的 Debian Squeeze 网络服务器上,我看到每个 fork 的使用量约为 20MB,因此大约 15 个连接已经耗尽了机器中的所有内存。获得如此多的并发连接并不难,因此进程可能会被终止,或者会使用大量交换空间。结果:服务器功能失调或服务响应缓慢。
我建议您:
显着缩小您的预分叉配置,例如:
<IfModule mpm_prefork_module> StartServers 10 MinSpareServers 5 MaxSpareServers 15 MaxClients 15 MaxRequestsPerChild 2000 </IfModule>
并且要接受这样一个事实:您无法同时服务超过 8 位访问者(通常每个浏览器有两个客户端连接)。这是内存量与所选 LAMP 配置相结合的限制。
迁移到 PHP-FPM,设置一个小型池并迁移到工作 MPM 甚至另一个 Web 服务器(例如 nginx)。工作 MPM 使用共享内存的线程,而不是不共享内存的分叉。这应该允许您处理更多并发访问者。