Fixing PHP Fatal Error: Allowed Memory Size Exhaus

发布时间:2020-06-14 22:36:47 作者:老K8
来源:网络 阅读:963

原文地址:https://www.airpair.com/php/fatal-error-allowed-memory-size
 
 

1简介:为什么会发生致命错误?

 
内存不足错误是PHP开发人员遇到的最常见和难以解决的问题之一 - 特别是对于处理大量数据的应用程序 - 这要归功于PHP相对保守的默认内存设置。事实上,仅Stack Overflow上有超过1,300个与PHP内存错误相关的问题。
 
98%的时间此错误来自加载到内存中的内容比您在一个进程中设置PHP要处理的内容多。还有其他原因,但这些不太常见 - 如果您使用的是PHP 5.3及更高版本,则很少会出现内存泄漏。
 
如果您不确定您的PHP内存限制设置为什么,它将有助于包含在错误消息中。但是,大小以字节为单位报告,因此我们为您完成了一些转换:
 

3 Xdebug,瑞士×××

在任何情况下,都可以依靠一个工具来帮助诊断您正在使用的内存量以及代码中使用大量内存的位置:Xdebug。您可以使用软件包管理器如安装yum,apt-get,port,和homebrew; 安装预先构建的二进制文件; 使用pecl; 或者只是自己编译。
 
安装Xdebug之后,您只需刷新页面,或者如果您的代码要在shell中运行,请在CLI中重新运行它。PHP现在将抛出更多信息性错误,包括一个调用堆栈,它将通过文件路径,行号甚至最后调用的函数准确地告诉您脚本停止的位置。
 
如果您需要更详细的信息,您需要生成所谓的“跟踪文件”。为此,请将xdebug.auto_traceand和xdebug.show_mem_deltaconfig指令设置为1。跟踪文件通常保存在/tmp或中/var/tmp,但您可以通过查看xdebug.trace_output_dir指令来检查输出路径phpinfo()。
 
只需运行代码,即使早期内存不足,也会创建跟踪文件(包括内存使用情况)。
 
要找到问题,请从跟踪文件的底部开始,然后逐步完成。查找具有大数字的增量(带有+或 - 的数字),并记住它们以字节显示。1024字节= 1千字节。
 
完成调试后,请务必xdebug.auto_trace回到0。跟踪文件可能变得非常大,非常快,并占用磁盘空间。
 

4 PHP内存管理

这是一个关于PHP如何在内部处理内存的精彩幻灯片。
 

5挑战

使用以下脚本并尝试查明问题所在。更好的是,安装Xdebug并生成跟踪文件。

<?php
function get_usage_in_kb(){
    echo memory_get_usage()/1024.0 . " kb \n";
}

class Profiler
{
    protected $startTime = 0;
    public function timerStart(){
        $this->startTime = microtime(true);
    }

    function timerEnd(){
        echo number_format( (microtime(true) - $this->startTime)*1000, 2 ), ' ms';
    }
}

class ProfilerHolder {
    protected $profiler;

    public function __construct( Profiler $profiler ){
        $this->profiler = $profiler;
    }
}

ini_set('memory_limit', '1M');

$profiler = new Profiler();

$profiler->timerStart();

get_usage_in_kb();

$holder = new ProfilerHolder( $profiler );

$b = null;

/**
 * @return string
 */
function make_dummy_data()
{
    return str_repeat( "Hello|", 114242 );
}

考虑到所有这些提示,您应该能够修复任何内存耗尽错误。

推荐阅读:
  1. Jmeter调用远程服务
  2. 单元测试退出标准

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

allowed-memory-size bytes exhausted memo

上一篇:php连接redis类

下一篇:Eclipse的PHP插件PHPEclipse安装和使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》