任务调度进程自动终止的可能产生原因
版本5.6
写了个无限循环的调度任务(console),实现的功能是查询一张表,有符合条件的记录则调用一个第三方程序完成后续功能,没有则继续查询该表。每次循环结束sleep一秒钟。理论使用场景是生产环境中每天早上8.35定时启动这个任务,下午4点结束。
现在遇到的问题是,发生过几次在下午3.40-3.50左右调度任务的进程自动终止,系统没有记录日志。我在调度任务中做了异常抓取,也没有记录下来任何日志。请问各位大佬,有些什么原因会导致这种情况发生?
关于 LearnKu
超过了进程的内存限制?
@jccisccj 如果是超过了进程的内存限制导致报错退出,应该有错误日志的吧?
日志可能也记不下了
每天都会发生吗? 被kill的时间段都是3:40 - 3:50?
有可能时间长了,内存消耗大,被OOM kill了,可以看下OOM日志。这个就是代码逻辑问题了。 话说你这调度任务,为啥要一直执行呢,用sleep方法呢,时间长了,数据库连接不会超时吗?加个进程锁改成1分钟执行一次不行吗? 或者把调度任务放到supervisor执行,自动重启好了。
尝试使用 register_shutdown_function 函数,来捕获并记录脚本退出时候的一些信息。
@songxue77 不是每天发生,目前已经运行1个多月,运维之前提出过两次,今天又发生了。但是每次都是临近4点了
@Brad-Wen 谢谢,我会试一下。因为先在生产环境中这个问题也只是偶发,下个生产版本要在两周以后才更新,我会先在本地用这个方法跑跑试试,看能不能复现
@sai0556 嗯哼,我找运维看看OOM日志。如果最终没找到解决方案,再跟运维协商一下换个更稳妥的方式管理这个进程了
每天都是那个时间点,有可能是某个定时任务干的事情。看看操作系统日志,和其它的定时调度任务是否有那个时间段的。
另加一个守护进程试试。
谢谢!
有后续么