我收到以下错误:
[23-Feb-2011 19:51:29] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 512 bytes) in /obj/class.db.php on line 60
我的问题是我不知道这个错误发生在哪里。 class.db.php的第60行是我的应用程序中最常用的函数之一(Database Read()函数)。
如何追溯此错误的来源?
答案 0 :(得分:5)
您可以尝试使用http://www.xdebug.org/
答案 1 :(得分:1)
这很可能就是问题发生的地方 - 你的脚本几乎吸收了所有128兆字节的限制,然后数据库类尝试分配更多的空间来从数据库中读取内容,超出限制和脚本barfs。
你在做什么需要使用128meg内存?
答案 2 :(得分:1)
如果在从数据库中选择数据时内存不足,您可能会尝试从数据库中同时获取太多数据并尝试将其全部加载到内存中。您的Database Read()方法是否可以自动获取数据并将其全部转换为变量?
您应该考虑逐步处理数据,作为一次抓取所有数据的替代方法,或者使用较小的数据集。另一方面,如果您有能力这样做并且您确实需要一次处理如此多的数据,您可以考虑更改内存限制并使用ini_set('memory_limit', '256M');
增加内存限制以将其增加到256MB。
请参阅:
http://php.net/manual/en/ini.core.php#ini.memory-limit和 http://php.net/ini_set
修改强>:
为了弄清楚你如何达到这一点的迹象,就免费解决方案而言,Xdebug可能是你最好的选择。我来看看:http://www.xdebug.org/docs/execution_trace
在查看堆栈跟踪时,xdebug.show_mem_delta选项可能是最有利于您查明内存使用量增加的原因。
答案 3 :(得分:1)
在php中,您可以设置自己的异常处理程序和错误处理程序,另请参阅php.net上的文档。发生错误时,您可以打印回溯并将其转储到文件或屏幕。
看看php函数:
set_exception_handler()
set_error_handler()
debug_backtrace();
希望它有所帮助, 格尔茨, Erwin Haantjes
答案 4 :(得分:0)
您可以尝试使用PHP Error来获取错误的堆栈跟踪。