我的长 运行 laravel 4 命令一直被杀死

My long running laravel 4 command keeps being killed

我有一个实现 laravel 命令的 laravel 4 网络项目。

在开发 homestead 虚拟机中 运行ning 时,运行s 完成(总时间大约 40 秒)。

然而,当 运行 在生产服务器上运行它时,它会退出并在命令行上输出 'killed'。

一开始我以为是cli里的max_execution_time php.ini,所以我把它设置为0(不限时间)。

我怎样才能找出是什么杀死了我的命令?

我 运行 它在 ssh 终端上使用标准 artisan 调用:

php artisan commandarea:commandname

laravel 4 某处有命令时间限制吗?

vps 是一台 Ubuntu 4.10 机器,带有 mysql、nginx 和 php-fpm

一个进程可能由于以下几种原因被终止:

内存不足

有两种方法可以触发此错误:超过分配给 php.ini 中的 PHP 脚本的内存量,或者超过可用的系统内存。检查PHP错误日志和php.ini文件排除第一种可能性,使用dmesg输出检查第二种可能性。

超过执行超时限制

在您的 post 中,您指出您通过 max_execution_time 设置禁用了超时,但为了完整起见,我将其包含在此处。确保 php.ini 中的设置正确并且(对于那些使用 Web 服务器而不是 CLI 脚本的用户)重新启动 Web 服务器以确保新配置处于活动状态。

堆栈错误

如果您的脚本没有错误并且没有遇到上述任何错误,请确保您的系统 运行 符合预期。使用网络服务器时,请重新启动网络服务器软件。检查错误日志是否有意外输出,并停止或升级相关守护进程和需要的。

所以,首先,感谢大家在 PHP 和 laravel 内存使用跟踪方面为我指明了正确的方向。

我已经回答了我自己的问题,希望它能使 laravel 开发者在未来受益,因为我的解决方案很难找到。

键入 'dmesg' 后显示系统消息。我发现 php 脚本被 Linux 杀死了。

因此,我在脚本的每个关键区域之前和之后将内存记录调用添加到我的脚本中:

Log::Info('Memory now at: ' . memory_get_peak_usage());

然后我 运行 脚本同时观察日志输出和 'top' 命令的输出。

我发现即使我的方法结束并且变量超出范围,内存也没有被释放。

我尝试过的 DIDNT 对我的情况有任何影响:

  1. 在我处理完变量后取消设置($varname) - 希望让 GC 开始
  2. 在脚本开头添加 gc_enable(),然后在取消设置大量变量后添加 gc_collect_cycle() 调用。
  3. 禁用 mysql t运行sactions - 认为这可能是内存密集型 - 它不是。

现在,奇怪的是上面的 none 有什么不同。我的脚本在终止时仍在使用 150mb 或 ram!

实际有效的解决方案:

现在这绝对是一个 laravel 特定的解决方案。 但是我的脚本的目的基本上是解析一个大的 xml 提要,然后使用 Elequent ORM 将数千行插入 mysql。

事实证明,Laravel 创建日志信息和对象来帮助您查看查询性能。

通过以下 'magic' 调用关闭它,我的脚本从 150mb 减少到 20mb 左右!

这是 'magic;' 调用:

DB::connection()->disableQueryLog();

我可以告诉你,当我找到这个电话时,我正在抓住救命稻草;-(

在 Laravel/Spark 项目中遇到过这个问题。只是想分享其他人是否有此问题。

如果 运行ning Vag运行t 或 Ubuntu 在更激进的方法之前,请尝试 refresh/restart 你的开发服务器。

我不小心 运行 在 Vag运行t 服务器上安装了依赖包。我还在安装错误期间反复删除并替换了一个镜像文件夹。我的错误是 Laravel/Spark 4.~.我能够 运行 迁移其他项目;在几乎所有命令的特定项目上,我很快就获得了 'killed',300 毫秒的时间范围。阅读其他用户,我害怕试图找到问题或损坏。在我的例子中,快速 Vag运行t 重新加载就可以了。 killed 问题已解决。