部署到端点时设置了尺度,如下所示:
--autoscaling-metric-specs=cpu-usage=70
--max-replica-count=4
我的问题是,尽管它仍然有待处理的请求/当它完成推理/中间推理时,一些容器会获得sigterm且结束。每个工人的持续时间各不相同。信号收到-15,安全关闭。主机名:PGCVJ,有829个未决请求,容器运行为4675.025427341461秒
信号收到-15,安全关闭。主机名:W5MCJ,有83个未决请求,容器运行为1478.7322800159454秒信号收到-15,安全关闭。主机名:N77JH,有12个待处理的请求,容器运行为629.7684991359711秒
为什么会发生这种情况,以及如何防止我的容器关闭?背景线程被催生
thread = Thread(
target=inference_wrapper,
args=(run_inference_single_document, record_id, document_id, image_dir),
daemon=False # false so that it doesnt terminate while thread running
)
ENTRYPOINT ["gunicorn", "--bind", "0.0.0.0:8080", "--timeout", "300", "--graceful-timeout", "300", "--keep-alive", "65", "server:app"]
当CPU使用减少/不再收到其他预测时,该容器关闭了吗?还是这与Docker工人计时有关?
我怎么可以调试这个 - 我所看到的是,关闭处理程序被调用,然后在日志中退出的工人后来。
如果您的应用程序仍在预测何时接收Sigterm,则意味着容器在完成预测之前就终止了。要处理此操作,您可以在应用程序中实现Sigterm处理程序。当处理程序收到Sigterm时,它应该开始失败准备探针。这将防止新的请求路由到容器,并允许其在关闭之前完成当前请求的处理。
为
写入组件以取消基础资源。您可以访问此公共文档,其中包括示例代码,该示例代码显示了如何附加Sigterm Handler。