如何缩短Heroku中Dyno的闲置超时时间?
调整Heroku Dyno闲置/无响应终止时间的方案
Heroku官方并未提供直接修改无响应dyno自动终止超时(默认24小时)的配置项,但可以通过以下几种方式实现自定义时长的终止逻辑:
1. 使用Heroku Process Scheduler定时检查并重启
- 安装Process Scheduler插件:
heroku addons:create scheduler:standard - 进入Heroku控制台的Scheduler页面,创建定时任务(比如每30分钟执行一次)
- 编写检查脚本(以bash为例),核心逻辑:
- 调用应用健康接口判断服务状态
- 若检测到无响应,触发dyno重启
示例bash脚本(需提前配置Heroku CLI权限):
#!/bin/bash # 调用应用健康接口,获取HTTP状态码 HEALTH_STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://your-app.herokuapp.com/health) # 若状态码非200,重启指定dyno if [ "$HEALTH_STATUS" -ne 200 ]; then heroku restart web.1 --app your-app-name fi
2. 应用内集成主动退出逻辑
- 在应用中添加定时自检任务(比如每15分钟执行一次)
- 检测核心服务可用性(如数据库连接、业务接口响应)
- 若确认服务无响应,主动调用
exit(1)触发进程退出,Heroku会自动重启该dyno(需确保启用自动重启)
3. 自定义监控脚本+Heroku API调用
- 编写独立脚本,定期通过Heroku API查询dyno的CPU、内存占用及请求响应指标
- 设定阈值判断dyno是否处于无响应状态
- 满足条件时,调用Heroku API的
DELETE /apps/{app-name}/dynos/{dyno-id}接口终止目标dyno
注意事项:
- 操作dyno需持有对应权限的Heroku API密钥(可在账户设置中生成)
- 完善健康检测逻辑,避免误终止正常运行的dyno
内容的提问来源于stack exchange,提问作者Bad Coder
相关产品推荐
相关产品推荐

