Laravel 消息队列被 Killed
在测试导入5000-10000条excel数据到数据库,中间需要做数据处理,比较耗时,为了有比较好的用户体验,采用了异步机制,用户点击后,后台启动消息队列来处理。但是,总是处理不完消息队列就被Killed了,查了好几天都查不出原因。求大神指点指点!
网上说都是内存不够
1、内存不够
方法1是查看linux 系统日志.
vi /var/log/messages
如果出现 kernel: Out of memory: Kill process意味着整个系统的内存已经不足,如果不杀死进程的话,就会导致系统的崩溃.
查了该日志,没有提示内存不够。我在代码层面监控内存也是没有不够的。整个消息队列运行过程都只用47M左右的内存。我的服务器有2G的内存。
2、程序出错
查看了laravel所有日志、队列日志均未发现报错信息。我抽程序出来使用浏览器单独运行可以运行到底,说明了不会是运行过程中数据导致的bug。
我没什么招了,请各路大侠支个招吧!
如何确定被 Killed?建议在命令行内手动运行队列处理器,看一下能不能复现问题。
有种可能是超过了 Laravel 队列的内存限制(默认 128M):
@Wi1dcard 是在命令行收到运行处理器,问题一再重现。就是不知道问题出于哪里。所有日志都翻遍了,都看不到任何有关的信息。
@leo
php artisan queue:work --memory=512
php artisan queue:work --memory=1024
都试过了,问题依旧。
@how2elegant 在命令行运行处理器,出现问题时没有任何报错提示,直接退出回到 Shell?
我也遇到过,好烦人啊
我今天也碰到这个问题了,我的情况是超时了, --timeout[=TIMEOUT] The number of seconds a child process can run [default: "60"] 默认是60秒,我改长了就流畅执行了
队列默认超时时间60是,长任务要自己设置超时时间 $timeout
我也遇到了 真奇怪