雄辩地占用内存 - 允许的内存大小为134217728字节

时间:2014-08-05 13:32:17

标签: php apache laravel eloquent

我今天尝试过工作但是我被这个错误打断了:

[Tue Aug 05 09:08:48 2014] [error] [client 93.103.209.208] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 130968 bytes) in /var/www/dev/vendor/laravel/framework/src/Illuminate/Database/Eloquuent/Model.php on line 643

导致错误的控制器/方法:

public function show($id)
{
 return $this->layout->content = View::make('users.show', array(
  'user' => User::find($id)
 ));
}

但是,如果我将User::find($id)替换为DB::table('users')->where('id', '=', $id)->first();,它就像魅力一样。 Eloquent在这里发生了什么?

我尝试在php.ini中增加我的memory_limit for apache& cli到200-230M但它没有帮助。我也尝试将它设置为-1无限只是为了看它是否会工作但是没有我只是得不到服务器的响应。是的,我在每次更改后都重启了apache。

原因

问题是我的User模型中有一个关系方法的结果。基本上在我的User类中,我有User { public function user() { return $this->hasOne('User'); } }创建了一个循环。

2 个答案:

答案 0 :(得分:2)

只是解析错误消息 - 你的PHP内存限制为128MB,有问题的行试图分配额外的~131KB

使用内存其余部分的变量可能与此函数无关,很可能就是这部分代码寻找其131KB只是一直在推动你超过128MB的限制。

我使用一些日志记录机制来记录代码中不同点的memory_get_usage()的返回值。这应该有助于您了解何时分配内存并让您了解如何优化代码。

答案 1 :(得分:0)

将您的代码更改为以下内容:

...
return $this->layout->content = View::make('users.show')->with(array('user' => User::find($id)));
...
// or WITHOUT return
$this->layout->content = View::make('users.show')->with(array('user' => User::find($id)));