任务调度进程自动终止的可能产生原因

版本5.6

写了个无限循环的调度任务(console),实现的功能是查询一张表,有符合条件的记录则调用一个第三方程序完成后续功能,没有则继续查询该表。每次循环结束sleep一秒钟。理论使用场景是生产环境中每天早上8.35定时启动这个任务,下午4点结束。

现在遇到的问题是,发生过几次在下午3.40-3.50左右调度任务的进程自动终止,系统没有记录日志。我在调度任务中做了异常抓取,也没有记录下来任何日志。请问各位大佬,有些什么原因会导致这种情况发生?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 11

超过了进程的内存限制?

3年前 评论

@jccisccj 如果是超过了进程的内存限制导致报错退出,应该有错误日志的吧?

3年前 评论

日志可能也记不下了

3年前 评论

每天都会发生吗? 被kill的时间段都是3:40 - 3:50?

3年前 评论

有可能时间长了,内存消耗大,被OOM kill了,可以看下OOM日志。这个就是代码逻辑问题了。 话说你这调度任务,为啥要一直执行呢,用sleep方法呢,时间长了,数据库连接不会超时吗?加个进程锁改成1分钟执行一次不行吗? 或者把调度任务放到supervisor执行,自动重启好了。

3年前 评论

尝试使用 register_shutdown_function 函数,来捕获并记录脚本退出时候的一些信息。

3年前 评论

@songxue77 不是每天发生,目前已经运行1个多月,运维之前提出过两次,今天又发生了。但是每次都是临近4点了

3年前 评论

@Brad-Wen 谢谢,我会试一下。因为先在生产环境中这个问题也只是偶发,下个生产版本要在两周以后才更新,我会先在本地用这个方法跑跑试试,看能不能复现

3年前 评论

@sai0556 嗯哼,我找运维看看OOM日志。如果最终没找到解决方案,再跟运维协商一下换个更稳妥的方式管理这个进程了

3年前 评论

每天都是那个时间点,有可能是某个定时任务干的事情。看看操作系统日志,和其它的定时调度任务是否有那个时间段的。
另加一个守护进程试试。

谢谢!

3年前 评论

有后续么

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!