我在 php 中遇到“内存不足”错误。我知道可以用ini_set("memory_limit","64M")之类的来修复,但是我不想,因为一个脚本那么大的内存是不正常的。我有一些非常庞大的报告,我非常需要这些内存,但通常不需要。
问题是:我什至不知道哪个脚本消耗了那么多内存,并且(还)没有用户报告错误。我知道这只是由于 log_errors(设置为 true)和 error_log(设置为我桌面上一个非常明显的文件)而发生的,但它没有报告哪个脚本是罪魁祸首。
知道如何知道吗?
最佳答案
您可能有一些基本的算法错误,创建大型数据结构,将数据重新构建为其他结构,过多的大型字符串操作,将整个文件加载到内存中,从存储中重新获取数据而不是重新使用检索到的数据上次,那种事情。许多本土数据库处理程序会为您提供从查询返回的整个数据集,而不是为您提供数据集资源。这对于可以返回比最初设想的更多数据的查询尤其有害。
分析代码后,您就可以开始查找内存浪费了。为了处理大型日志记录数据集,将代码结构化为一次处理一行,因此它(例如)while( $data = mysql_fetch_assoc() )
而不是 foreach( $data_rows作为 $data )
。这还允许您使用无缓冲查询,这也将减少内存消耗。
错误日志应该告诉您死掉的脚本。也许 Apache 错误日志可以提供帮助。
关于php - 在 php 中允许耗尽 * 字节的内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/827435/