当在开发宅基地vm中运行时,它运行完成(总时间约为40秒).
但是,在生产服务器上运行它时,它会在命令行上以“已终止”输出退出.
起初我以为它是cli PHP.ini中的max_execution_time,所以我把它设置为0(无限时间).
我怎样才能找出杀死我命令的内容?
我使用标准的artisan invokation在ssh终端上运行它:
PHP artisan commandarea:commandname
laravel 4在某处有命令时限吗?
我已经回答了我自己的问题,希望将来有利于laravel开发者,因为我的解决方案很难找到.
输入’dmesg’后显示系统消息.我发现PHP脚本被Linux杀死了.
因此,我在脚本的每个关键区域之前和之后将内存日志记录调用添加到我的脚本中:
Log::Info('Memory now at: ' . memory_get_peak_usage());
然后我在观察日志输出的同时运行脚本以及’top’命令的输出.
我发现即使我的方法结束并且变量超出范围,内存也没有被释放.
我试过的东西,DIDNT在我的情况下有所不同:
>在我完成它们之后对变量进行unset($varname) – 希望让GC开始
>在脚本开头添加gc_enable(),然后在未设置大量变量后添加gc_collect_cycle()调用.
>禁用MysqL事务 – 认为可能是内存密集型 – 它不是.
现在,奇怪的是,以上都没有任何区别.我的剧本在杀死时仍然使用150mb或ram!
实际工作的解决方案:
现在这绝对是一个特定的解决方案.
但我的脚本目的基本上是解析一个大的xml Feed,然后使用Elequent ORM将数千行插入到MysqL中.
事实证明,Laravel创建了日志信息和对象,以帮助您查看查询性能.
通过以下“魔术”调用将其关闭,我将脚本从150mb降低到大约20mb!
这就是’魔术;’呼叫:
DB::connection()->disableQueryLog();
当我发现这个电话时,我可以告诉你,我正在抓稻草;-(