我在Larave 5.2中有一个项目,我正在使用:
该项目主要基于webhooks。其他网站调用我们的webhook,我将这些webhook添加到队列中。粗略地说,每小时有10000个工作岗位被添加到队列中。
我在主管配置中设置了50个num_process。
您能否建议我如何快速处理队列中的作业?所以我不必等待数小时才能完成我的工作。
以下是队列中当前状态的屏幕截图
非常感谢任何帮助。
谢谢
主管配置:
[program:laravel_queue]
command=php /var/www/html/nivesh/artisan --env=production --timeout=3600 queue:listen --queue=important,urgent,high,default
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)s
numprocs=55
stderr_logfile=/var/log/laraqueue.err.log
stdout_logfile=/var/log/laraqueue.out.log
priority=999
numprocs_start=55
startsecs=0
redirect_stderr=true
答案 0 :(得分:2)
每次加载框架时,Laravel都会严重影响队列的速度。当您在队列中收听时会发生这种情况。
您应该使用--daemon flag运行队列,以避免为每个队列条目重新加载框架:
[program:laravel_queue]
command=php /var/www/html/yopify/artisan --env=production --timeout=3600 queue:work --queue=important,urgent,high,default --daemon
autostart=true
autorestart=true
process_name=%(program_name)s_%(process_num)s
numprocs=55
stderr_logfile=/var/log/laraqueue.err.log
stdout_logfile=/var/log/laraqueue.out.log
priority=999
numprocs_start=55
startsecs=0
redirect_stderr=true
您也可以将Supervisor作业配置文件归结为您,因为您使用的某些参数已由默认值设置:
[program:laravel_queue]
command=php /var/www/html/yopify/artisan --env=production --timeout=3600 queue:work --queue=important,urgent,high,default --daemon
process_name=%(program_name)s_%(process_num)s
numprocs=55
stderr_logfile=/var/log/laraqueue.err.log
stdout_logfile=/var/log/laraqueue.out.log
numprocs_start=55
startsecs=0
redirect_stderr=true
我建议您使用user
参数,因为您当前的作业是以root用户身份运行的 - 这可能不需要以如此高的权限运行您的队列,我认为这是一个安全风险。我建议将其设置为拥有/var/www/html/yopify/
答案 1 :(得分:1)
检查您是否没有远程调用外部URL。
还要在各个地方添加提示,以查看哪个操作需要很长时间。
尝试将所有队列分成多个较小的事件,不要做1个长任务,制作一系列事件。
答案 2 :(得分:1)
几个月前我们确实遇到过类似的问题,这就是我们所做的,
*摆脱日志记录:它减少了写入日志所花费的时间,并加快了队列中作业的执行速度。 *避免外部呼叫:外部呼叫确实需要时间来获取数据,这也取决于所获取数据的大小。而是尝试在内部存储它们。 *使用子队列:使用子队列执行子任务。
我的建议尝试切换到redis,因为它可以轻松跟踪作业状态,同时您可以在redis服务器上写一些快速查询(redis cli)。