标签:
最近遇到一个问题.
额, 先讲下背景吧. 业务需求是一个定时抓取的资讯的任务A(在laravel 5.2 框架下), A 是每十分钟跑一次, 但是线上一直没有数据, 于是乎查找了, 因为A任务设置了不重复启动(即如果A十分钟没有完成就不会再起一个),.这个互斥实现是这样的, 任务启动时就会生成一个空文件(指定目录下), 任务结束后文件也就会被删除, 如果文件不被删除, 那任务就一直不会再启动. 所以线上一直没有数据. 看了下文件的创建时间,果然,很久了.
好了, 那找原因吧, 先加个try catch, 把错误打到日志吧, 放它跑一段时间, 等待任务"挂掉", 果然没过多久就"挂掉"了, 查日志吧,草,毛都没有.
想: 不会是内存溢出了吧. 重新看看代码, 没有什么大数组操作啊,一行一行打印吧, 看看问题出在那里了.
果然让我找到了, 试了几次, 都是Curl get的时候‘挂掉‘, 奇怪了, Curl 怎么会直接挂掉那, 当时也没多想(curl 用的是github有人维护的项目),.
于是自己"天才"了一把, 如果文件创建一个小时还没在的话那就把它删了吧, 嗯,就这样.由于任务机制是框架的, 改了麻烦, 那就跑哥定时任务吧. 写完后,搞定. 跑了半天, 没毛病, 差点都佩服自己了.
第三天, 服务器cpu 飙到98%报警了, 你妹啊, 赶紧查了下, 都是那个定时任务的进程, 先手动杀些再说.
curl "挂掉", 进程不会回收, 请教了老大一下. 如果是进程关掉, 系统肯定会回收的, 进程还在只可能是程序的死循环.
curl 死循环, 不至于吧. google了一番, 发现多数都有提到请求次数的限制(即 CURLOPT_TIMEOUT), 看看任务,果然没有设置, 然后把curl 次数限制了下, 就没有再出现问题, 搞定.
标签:
原文地址:http://www.cnblogs.com/melody68/p/5598134.html