雄辩地消耗内存-允许内存大小为134217728字节耗尽


Eloquent eating up memory - Allowed memory size of 134217728 bytes exhausted

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

[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)
 ));
}

然而,如果我用DB::table('users')->where('id', '=', $id)->first();代替User::find($id),它就像一个魅力。雄辩家这是怎么回事?

我试着增加我的memory_limit在php.ini为apache &到200- 2.3米,但无济于事。我还尝试将其设置为-1无限制,只是为了看看它是否会起作用,但没有,然后我根本没有从服务器得到响应。是的,我确实在每次更改后重新启动apache。

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

仔细分析一下错误消息—PHP的内存限制为128MB,有问题的行试图分配额外的~131KB

使用剩余内存的变量可能与这个函数无关,很可能只是这部分代码寻找它的131KB,只是不断地将您推到128MB的限制。

我会使用一些日志机制来记录代码中不同位置memory_get_usage()的返回值。这应该给你一些指示,当内存被分配,并允许你弄清楚如何优化代码。

将代码修改为:

...
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)));
相关文章: