函数计算FC这个健康检查的时间可以设置吗?服务启动时间比较久,默认的健康检查策略是什么?
Function instance health check failed on port 8860 in 120 seconds
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云函数计算(FC)中,健康检查的时间参数是可以自定义配置的。具体来说,您可以设置以下与健康检查相关的时间参数:
首次探测延迟时间(initialDelaySeconds)
探测时间间隔(periodSeconds)
探测超时时间(timeoutSeconds)
通过合理配置这些参数,您可以根据服务的实际启动时间和运行需求调整健康检查策略。
如果未对健康检查进行自定义配置,函数计算会使用默认的健康检查策略。默认策略如下:
这意味着,健康检查会在容器启动后立即开始,并每隔3秒发送一次HTTP GET请求。如果连续3次健康检查失败,则认为实例不健康。
如果您的服务启动时间较长,可能会导致健康检查在服务完全启动前就判定实例不健康。针对这种情况,建议采取以下措施:
增加首次探测延迟时间(initialDelaySeconds)
initialDelaySeconds
的值,确保健康检查在服务完全启动后再开始执行。调整探测时间间隔(periodSeconds)和超时时间(timeoutSeconds)
periodSeconds
和timeoutSeconds
,以避免因响应时间不足而导致健康检查失败。优化服务启动逻辑
/readyz
)。例如,可以在服务启动完成后才返回健康检查的成功状态。Function instance health check failed on port 8860 in 120 seconds
此错误表明函数实例在120秒内未能通过健康检查。可能的原因及解决方法如下:
服务启动时间过长
initialDelaySeconds
的值,确保健康检查在服务完全启动后再开始执行。健康检查路径未正确配置
/readyz
)未正确返回HTTP状态码200。app.get('/readyz', (req, res) => {
console.log(`receive health check`);
res.status(200).send('i am ready\n');
});
如果服务尚未准备好,可以返回500状态码,表示实例不健康。
端口监听问题
const PORT = 8860;
const server = app.listen(PORT, '0.0.0.0', () => {
console.log(`Running on http://0.0.0.0:${PORT}`);
});
网络或防火墙限制
initialDelaySeconds
、periodSeconds
和timeoutSeconds
等参数。通过以上措施,您可以有效解决健康检查失败的问题,并确保服务的稳定运行。