【问题标题】:PHP Fatal error: Out of memory (allocated 524288) (tried to allocate 311296 bytes)PHP致命错误:内存不足(分配524288)(试图分配311296字节)
【发布时间】:2014-04-04 02:15:50
【问题描述】:

在我大约一个月前的 php 错误日志中,我看到一个错误

PHP Fatal error:  Out of memory (allocated 524288) (tried to allocate 311296 bytes) public_html/index.php on line 347

这很奇怪,因为错误说它只分配了 524288,这将是 512 KB 错误和往常一样,只发生在这行脚本上,我每天会收到大约 10-20 次这个错误

在 index.php 中,我包含了 4-5 个脚本,并且在那一行 (ln 347) 上只有返回一些 css 代码并且没有 无限循环

看了很多题目,把mempry_limit改为256M,在apache中添加了RLimitMEM 173741824 247483648MaxRequestsPerChild 9000

在我的测试中,我使用这样的代码

if($_SERVER['REMOTE_ADDR'] == $my_IP) 
{
  var_dump(memory_get_usage());
  var_dump(memory_get_peak_usage());
}

在脚本的开头和结尾处:

int(729812) int(741124)  -  int(915952) int(953968)  

我有一个安装了 php 5.3.221.5 GB ram 的 vps,其中大多数时候 200-500 mb 是免费的,我有一些关于 每天 20,000 次点击可能更多,服务器负载有时会在一段时间内达到 8 次

网站速度很快,速度没有问题

在根目录中有 3-4 个 php 文件也可供公众访问,但在错误日志中我看不到它们,尽管它们没有像 index.php 那样命中

在我的本地主机中,我安装了 x-debugwin 缓存研磨,当我分析 index.php 脚本时,我也没有发现任何问题

在这个 vps 上,我还安装了 wordpress,它也会出错,但至少他可以分配的内存量更多,其中一个错误是这样的:

PHP Fatal error:  Out of memory (allocated 9961472) (tried to allocate 7 bytes) in /public_html/blog/wp-includes/canonical.php on line 157

对于 wordpress,我在 htaccess 中设置了 memory_limit 256M

我还安装了 livezilla,它也会出错

PHP Fatal error:  Out of memory (allocated 524288) (tried to allocate 77824 bytes) in public_html/support/_lib/functions.global.inc.php on line 520

对于 livezilla,我还在 htaccess 中设置 memory_limit 256M

我应该提到,在我的 vps 中,我托管了 5-6 个其他网站

有一次我在 phpMyAdmin 中遇到了这个错误,上面写着:

PHP Fatal error:  Out of memory (allocated 524288) ...

再次只分配了 524288

我一遍又一遍地重新启动 apache,但没有任何改变

错误日志中的行号是否会因为在该行之前包含其他脚本而出错?

可能是cpu问题?

我正在为这个错误苦苦挣扎大约 2 个月,我不知道还能做什么 有什么想法吗?

【问题讨论】:

  • 这是直接退出。您每天获得 20,000 次点击,同时获得多次点击会消耗您当前允许 apache fork 消耗的所有内存,考虑到其他运行实例的剩余内容。
  • 真正的问题是,你在写什么样的代码?这通常是由于死循环、对象实例化不正确等造成的。
  • 可能是您正在运行带有 suhosin 强化扩展的 php? suhosin 复制了一些 php 配置选项,memory_limit 就是其中之一。

标签: php apache .htaccess vps


【解决方案1】:

很可能您的网络服务器在内存消耗、允许的并发请求和可用内存方面未配置好。

评估您的日志以查看您在此类高峰期有多少并发请求。你可以用ab 给你的服务器施加压力来重现这些情况。每天 20k 次点击 1.5 GB 内存感觉不对。检查您的网络服务器配置,允许多少并发请求以及分叉可能增长多少。我敢肯定他们会轻易吃掉这 1.5 GB。

【讨论】:

  • 谢谢,如果我理解正确的话,并发请求基本上是 css 和 js 文件和字体。所以你说 1.5 GB 不足以满足这些点击量?我在任何地方都找不到允许多少并发请求以及在 apache 中可能会增长多大的分叉。能具体点吗?
【解决方案2】:

在 apache 中为 prefork 设置配置有效!

【讨论】:

    猜你喜欢
    • 2011-09-12
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2018-01-14
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多