Apache 没有足够的记忆

我有 VPS 从 768 MB的RAM和处理器 1,13 GHz。 我有一个约会网站 php / mysql, 性能优异,服务器上的负载通常非常低。

有时我发布广告 Facebook, 在高峰时段,我可以得到 100-150 点击几秒钟 - 这导致服务器上的内存短缺:

不可能分配内存:无法创建子进程: / opt / suphp / sbin / suphp ....

所有用户都弄错了 500 页。

我只是想知道,它听起来很合理 - 对我来说 100-150 似乎并不是一个应该导致的数字 apache 缺乏记忆。

任何建议 / 欢迎诊断问题的建议。
已邀请:

喜特乐

赞同来自:

通常通过减少内存卷的优化 (和约束) 以下因素:

同时流程数 Apache (我建议切换到初步版本 MPM, 这在内存限制环境中是部分更可管理的)

转出 mod_php 或者 php_cgi 到 fastcgi, mod_cfgid 工作正常。 减少允许生成的过程的数量 php 通过 FcgidMaxProcesses 并删除长超时 (厘米。
http://httpd.apache.org/mod_fc ... .html
)

"当前的" 服务器,特别是由于不必要的长超时的减少 ((断开) 连接时间,活动支持消息, ...)

如果负载变得非常大,您还应该探索速度处理速度 (加载速度更快地提高了总尺寸 * 一个请求所需的内存时间)

优化您的网站代码 (改善PHP代码更快和 / 在记忆方面或更高效)

优化执行 PHP (xcache 可以加快工作几次工作)

整数请求的缓存也有效,看 mod_cache

如果您的网站根本没有加载处理器,并且您需要极端 Req / S, 尝试一些其他Web服务器 (例如, nginx 或者 lighttpd), 这在这种情况下表现得更好。

小明明

赞同来自:

首先要做的是按顺序将您的当前系统放入。 默认 apache 通常配置您可能不需要的多个扩展 (特别是, auth 和 proxy, 如果你使用 SSL, 但只有偶尔,然后考虑删除 mod_ssl 和推出 stunnel 而不是这一点). 打开 mod_deflate. 看看你系统上工作的所有东西 - 关掉 (并禁用) 您不需要的所有服务。

接下来,开始 suphp 在突出的机器上通过 CGI 通常是非常愚蠢的想法 - 使用 mod_php 或者 fastCGI.

加快系统的工作,您不仅改善了客户的维护,还可以减少内存量。 所以....

安装事务代码缓存 PHP, 如果你还拥有它。

开始挖掘系统的性能 - 更改配置 httpd, 开始注册% D, 并查看URL频率和%的工作 D, 确定哪些网址导致最大问题。

减少慢速请求杂志的阈值 MySQL - 用它
http://www.retards.org/projects/mysql/
或以类似的方式分析数据 (请注意,您应该根据频率和执行时间的工作安排优先级。).

添加自动添加以启用输出缓冲区压缩 gz.

开始编写运行进程的数量 httpd 并将其与实惠的更小的缓存进行比较 / 缓冲来自“免费” - 比较数据并描述它们以确定多少进程 httpd 你可以明智地运行 - 然后改变你的 httpd.conf, 确保这个限制。 请注意磁盘输入

现象

慢 - 因此,需要缓存足够的内存。

开始观察您的服务器是否提供有关内容缓存的良好信息 - 或客户端和代理必须继续返回没有改变的事情 (mod_expires, mod_headers)

但有时你只需要更多的设备。 我建议思考第二台服务器,而不仅仅是更新您拥有的服务器 - 添加循环 DNS 不重要的 - 并且您将以更好的可用性的形式获得额外的福利。 (一旦找到了如何处理数据库复制) .

詹大官人

赞同来自:

每个实例的内存要求 Apache 是的 10 MB,虽然确切的金额取决于您的配置。 所以,如果你想服务 100 同时连接C. Apache, 至少你需要 1 GB RAM加上系统所需的所有内容, MySQL 你使用的其余部分。

如果要停止“出错”状态,则可以配置

MaxClients

配置参数 Apache 到适当的水平。 获得每个实例的内存估计 Apache, 看

top

带上和减去柱子 RES 和 SHR 所有团队 httpd. 务必扣除所有内存所需的内存 MySQL 和其余的系统。 请注意,您可以获得相对较小的金额。 MaxClients 在这台机器上 (30-50).

其他答案给出了一个很好的简历,你可以做到改善你可以进入的同步查询的数量。 请记住,在这样的年轻系统上可能很困难,尽管它不一定是不可能的,适应 Apache / PHP / MySQL 一个好处 lighttpd / nginx / memcached / caching. 如何容易或困难取决于您的应用和目标性能。 考虑切换到更大的服务器 ... 您将更容易收集所需的一切 2 或者 4 GB.

奔跑吧少年

赞同来自:

驾驶峰值交通很难。 替代方案包括:更轻松的HTTP服务器 (lighttpd, nginx 等等。); 更多的身体 RAM; 负载均衡和其他主机,其额外的优势以更高的可用性的形式提供了额外的优势; 将应用程序代码卸载到系统中,与HTTP服务器分开,通常通过 FastCGI; 动态分配计算资源以通过云服务满足负载,例如 EC2; 或者我忘记或没有出现的其他思想。 有几个优秀的资源; 在
http://highscalability.com/
例如,博客涵盖了这个领域的大部分地区。 我希望它会有所帮助!

要回复问题请先登录注册