微信扫一扫打赏支持

legend3---laravel脚本运行40s报错

legend3---laravel脚本运行40s报错

一、总结

一句话总结:

【代码逻辑错误】:录入博客稍有问题就报错return,这样就【直接return到最外层的load_blog】,所以在load_blog中接下来执行的时候【就没有参数】了,所以就出错了

 

1、调试bug比较好的方式?

在日志中【打印中间结果】,如果想要自己结果显示更方便,可以用【自定义日志】

 

2、【循环中,不要直接return数据】?

循环中,不要直接return数据,可以等【循环完后,统计数据】

 

 

 

二、laravel脚本运行40s报错

1、现象

录入博客的时候脚本运行40s稳定报错,如下图:

 

原因是【load_blog方法被重复运行】,在第40s的时候load_blog方法重复执行,不过第二次运行的时候没有传过去的日期数据,所以这里报错

 

因为是录入博客数据,爬取多篇博客比较耗费时间,所以在程序中设置了脚本不限时

set_time_limit(0);

但是laravel对脚本或者方法时长应该还有其它设置,照上面的现象,【估计是方法超时了会重复执行】

 

 

可以看到load blog等方法被执行了两次,第一次有日期参数,第二次没有,所以第二次就停了,报LoadBlogEntrance错误

 

2、检查脚本是不是被超时关闭

可以在执行的方法中加入如下代码:

for ($i=0;$i<10000*10000;$i++){
    if($i%1000==0) dump($i);
}

循环到10000*10000,所花时间为5.5min,且并没有被异常关闭

 

如此结果证明脚本不是被超时关闭,更像是被laravel机制重复执行了方法

 

并且当加了300W次循环之后,执行时间稳定在52s

 

3、使用队列还是有同样的问题

 

 

 

4、可以看到是服务器内部错误,其实问题应该是【代码写的有问题】

估计是有出错就返回的代码逻辑有问题

解决思路应该是好好调整一下录取博客逻辑

 

5、问题原因

录入博客稍有问题就报错return,这样就直接return到最外层的load_blog,所以load_blog的时候就没有参数了,所以就出错了

 

 

看这份日志信息,其实挺明确的

 

 

 
posted @ 2021-03-07 23:23  范仁义  阅读(91)  评论(0编辑  收藏  举报