Curl '挂掉'

最近遇到一个问题.

额,先讲下背景吧。 业务需求是一个定时抓取的资讯的任务A(在laravel 5.2 框架下),A 是每十分钟跑一次,但是线上一直没有数据。查找下原因吧, 因为A任务设置了不重复启动(即如果A十分钟没有完成就不会再起一个),这个任务互斥是这样实现的的,任务启动时就会生成一个空文件(指定目录下),任务结束后该文件也就会被删除,如果文件不被删除,那该任务就一直不会再启动,所以线上一直没有数据。看了下文件的创建时间,果然,已经很久了。

好了,那找原因吧,先加个try catch,把错误打到日志吧,放它跑一段时间,等待任务"挂掉",果然没过多久就"挂掉"了。查看日志,草,毛都没有。

想: 不会是内存溢出了吧。重新看看代码,没有什么大数组操作啊。一行一行打印吧,看看问题出在那里了。

果然让我找到了,试了几次,都是Curl get的时候'挂掉"。奇怪了, Curl 怎么会直接挂掉那,当时也没多想(Curl 用的是github有人维护的开源项目)。

于是自己"天才"了一把,如果文件创建一个小时还没在的话那就把它删了吧,嗯,就这样。由于任务机制是框架的,改了麻烦,那就跑个定时任务去删文件吧。写完后,跑了半天,没毛病,搞定,都佩服自己了。

第三天,服务器cpu 飙到98%报警了,你妹啊,赶紧查了下,都是那个定时任务的进程,先手动杀些再说。

Curl "挂掉",进程不会回收?请教了老大一下:如果是进程关掉,系统肯定会回收的,进程还在只可能是程序的死循环。

curl 死循环,不至于吧。找google吧,发现多数都有提到请求时间的限制(即 CURLOPT_TIMEOUT),看看任务,果然没有设置。然后把curl 超时时间限制了下,就没有再出现问题,搞定。

posted @ 2016-06-19 15:24  melody_lql  阅读(303)  评论(0编辑  收藏  举报