Avi*_*tal 5 java cron google-app-engine task-queue google-cloud-sql
我们有一个cron作业,它在后端模块上每小时运行一次并创建任务.cron作业在Cloud SQL数据库上运行查询,并且任务对其他服务器进行HTTP调用并更新数据库.通常它们运行得很好,即使创建了数千个任务,但有时它会"卡住",并且日志中没有任何内容可以解释这种情况.例如,昨天我们监控了cron作业,同时它创建了几十个任务,然后停止了,还有8个任务也被卡在了队列中.当很明显没有发生任何事情时,我们再多次运行该过程并且每次都成功完成.
一天之后,原始任务被DeadlineExceededException杀死,然后显然在同一实例中运行的其他8个任务被以下消息杀死:处理此请求的进程遇到问题,导致它退出.这可能会导致新进程用于您的应用程序的下一个请求.如果经常看到此消息,则可能会在应用程序初始化期间抛出异常.(错误代码104)
在进程被杀死之前,我们在日志中看不到它们的记录,现在我们看到它们在DeadlineExceededException之前没有日志记录,所以我们不知道它们在什么时候被卡住了.我们怀疑数据库中存在一些锁定,但我们在以下链接中看到查询有10分钟的限制,因此这会导致进程在一天之内发生故障:https://cloud.google. COM/AppEngine上/文档/ JAVA /云的SQL /#Java_Size_and_access_limits
我们模块的类和扩展配置是:
<instance-class>B4</instance-class>
<basic-scaling>
<max-instances>11</max-instances>
<idle-timeout>10m</idle-timeout>
</basic-scaling>
Run Code Online (Sandbox Code Playgroud)
队列的配置是:
<rate>5/s</rate>
<max-concurrent-requests>100</max-concurrent-requests>
<mode>push</mode>
<retry-parameters>
<task-retry-limit>5</task-retry-limit>
<min-backoff-seconds>10</min-backoff-seconds>
<max-backoff-seconds>200</max-backoff-seconds>
</retry-parameters>
Run Code Online (Sandbox Code Playgroud)
我上传了一些cron作业的跟踪数据图片:http: //imgur.com/a/H5wGG.这包括跟踪摘要以及时间轴的开始/结束.8个已终止的任务没有跟踪数据.
可能是什么原因以及我们如何进一步调查?
我们最终通过以下步骤解决了这个问题:
| 归档时间: |
|
| 查看次数: |
732 次 |
| 最近记录: |