AppEngine标准环境(Java 8)PushQueue有时最多延迟10分钟

时间:2019-05-07 09:30:32

标签: java google-app-engine java-8

我们正在将appengine标准环境(Java 8 // SDK版本1.9.73)与pushQueues一起使用。

这是我们的队列定义:

<queue>
            <name>push-device-send-queue-2</name>
            <rate>250/s</rate>
            <bucket-size>50</bucket-size>
            <max-concurrent-requests>1000</max-concurrent-requests>
            <retry-parameters>
                    <task-retry-limit>3</task-retry-limit>
                    <task-age-limit>2m</task-age-limit>
            </retry-parameters>
</queue>

这是我们的自动缩放参数:

    <instance-class>F4</instance-class>
    <automatic-scaling>
            <min-idle-instances>1</min-idle-instances>
            <max-idle-instances>1</max-idle-instances>
            <min-pending-latency>200ms</min-pending-latency>
            <max-pending-latency>3s</max-pending-latency>
            <max-concurrent-requests>15</max-concurrent-requests>
    </automatic-scaling>

队列由以下代码启动:

TaskOptions options = TaskOptions.Builder
                            .withUrl("/pushDeviceSendQueue")
                            .header("charset", "UTF-8")
                            .method(Method.POST)
                            .payload(gson.toJson(data));
queue.addAsync(options);

在servlet中调用future.get(),以开始代码并通常在1-2秒后完成。因此,我们希望届时所有任务都将排队。

我们设置了一个kibana安装程序,以监视在启动servlet和执行队列servlet之间发生的延迟。它们中的大多数都很好,但是大约有1%在最晚延迟10分钟后启动(所有ms时间戳大约为600,000 ms) 发生问题时打开https://console.cloud.google.com/cloudtasks会显示出现问题时,在队列中驻留指定时间(7-10分钟)的单个任务。

有趣:同时,计划任务“超越”了有问题的单个任务。它们仅在不到几秒钟的时间内执行。正如我们的很高的队列设置(吞吐量)所看到的,此时队列未达到最大值。几乎只有几个任务在运行(〜5-10)

我们期望发生的事情:

使用上述代码安排的所有任务队列将在秒而不是10分钟之内运行(这是10分钟的神奇数字是什么)

复制步骤:

使用上面的代码安排任务。

请参阅此说明性日志摘录。

enter image description here

链接到Google代码条目:https://issuetracker.google.com/issues/132135612

0 个答案:

没有答案