# 服务问题排查指引
# 服务运行中问题
# 一段时间不访问服务后,发现访问不通或访问速度明显变慢。再次访问后恢复/控制台服务状态显示:0 个实例(自动暂停)或服务启动中/报错:"connect ECONNREFUSED"或"SERVICE_NOT_READY"
- 「服务设置」中,实例副本数最小值为 0 时,需要注意半小时无请求服务将缩容到 0,服务自动暂停,最大程度节约资源。再次请求时将重启服务,扩容新的实例。重启过程中的请求会报错:"connect ECONNREFUSED"或"SERVICE_NOT_READY",控制台服务状态显示为"服务启动中"。
- 服务从 0 扩容到 1(冷启动)耗时由服务启动速度决定,请尽可能优化服务启动性能。
- 如果你想彻底避免服务冷启动影响,到「服务设置」中将「实例副本数」最小值设为 1,但会持续产生资源消耗,请根据业务状态自行权衡。
# 服务运行中向容器写入的文件,过一段时间就不见了。
容器不支持持久化存储,请勿将图片、视频等文件直接存储在容器中,容器扩缩容/重启自愈时,这些写入的文件会被还原。请使用「对象存储」管理文件。
# 容器中时间跟本地时间相差 8 小时。
容器默认时区为 UTC,如需使用上海时间,请参考官方模板中的 Dockerfile,启用时区设置命令。
注意:使用无 Dockerfile 模式部署,暂时不支持修改时区,只能用默认时区。
# 仍然使用 sns、jscode2session、getAccessToken 类接口,自行维护 access_token 时,请求 api.weixin.qq.com 超时/报错 502。
因项目迁移无暇改造为云调用方式,请关闭「开放接口服务」开关,然后重新部署使配置生效。
「开放接口服务」开关开启时,默认将使用云调用方式,因此可能引发链路超时或报错。
# 服务概率性出现 500 报错(排除各种代码错误后)
在「服务监控」中检查 CPU 使用率/内存使用率是否过高,甚至内存溢出 OOM。
- 所选容器规格过小,请调大规格。如果规格设置过低导致一个容器实例连 1 个请求都支撑不了(本身系统基础逻辑就很重),可能会导致部署成功但出现 500 错误。Java 服务相对较重,建议使用 1 核 2G 及以上规格。
- 设置的「扩缩容条件」不合适,比如设置的是 CPU 使用率大于 60% 扩容,但 CPU 未达标时内存使用已满。建议内存消耗大于 CPU 的服务,使用内存使用率作为扩缩容条件。
# 调用 https://api.weixin.qq.com 报 PKIX path building failed/Error: self signed certificate / x509: certificate signed by unknown authority
# 部署失败问题
# 本地运行正常,部署到云托管后却部署失败?
本地调试请尽量基于本地 Docker 进行,具体可参考本地调试 文档。
如果未基于本地 Docker 进行调试,直接转到云托管部署时可能遇到以下情况:
- 本地运行的时候,各种依赖组件、扩展在本地都是齐全的,但是没有在 Dockerfile 正确添加依赖安装命令,所以本地运行时不缺依赖没问题,部署到云托管上时就会因为缺乏依赖导致报错。
- 本地运行的时候,连接的是本地数据库(地址为本机 IP 或 localhost),部署到云托管上时没有将数据库地址改为云上的数据库地址。导致因为数据库无法连接而部署失败。
- 本地使用的运行时环境(JDK/python 版本等),与 Dockerfile 中定义的运行时环境不一致。
# Readiness probe failed: dial tcp xx.xx.xx.xx:xxx: connect: connection refused
无法通过健康检查/端口调用不通。
- 服务启动正常,但是端口填写错误,真实端口与发布时填写端口不符,导致系统误认为部署失败。
- 服务启动成功,但反复重启,进程不稳定,导致端口无法稳定调通,无法通过健康检查。请自行结合日志排查代码问题,或考虑是否因为所选容器规格过小导致内存 OOM。
- 如果你的 Dockerfile 中包含了多行独立的 CMD 命令,请注意这是错误的写法!只有最后一行 CMD 命令会被执行,之前的都会被忽略,导致业务报错。请参考Docker 官方文档之 CMD 命令
# 部署失败但看业务日志已经在正常运行
- 检查服务设置中端口与真实项目端口是否一致。如果服务启动正常,但是端口填写错误,真实端口与发布时填写端口不符,会导致系统误认为部署失败,调用服务也会报错。
- 如端口确认填写无问题,可在用户群或开发者社区提问或提交工单「云托管控制台-帮助-新建工单」。
# check pod status is not ok
- 服务因代码原因反复重启,状态不稳定。请自行排查代码问题。
- 尝试取消部署后重试。
- 若服务并未反复重启,请提工单联系我们排查。
# Back-off restarting failed container
代码原因导致服务启动失败,请借助服务日志自行排查代码问题,或参考本地调试 文档。没有采集到服务日志,请检查「服务设置」-「基础信息」-「日志采集路径」是否配置正确。
# 自行下载/拷贝了官方模板后上传部署失败(非通过控制台直接模板部署)
手动新建一个服务并部署模板代码,需要在「服务设置」中补全以下环境变量,才可正常使用,否则会引发无法连接数据库,进而导致部署失败。
MYSQL_ADDRESS
MYSQL_PASSWORD
MYSQL_USERNAME
以上三个变量的值请按实际情况填写。如果使用云托管内 MySQL,可以在控制台 MySQL 页面获取相关信息。
# 部署 eggjs 服务,运行 npm run start 不停重复启动
需要去掉进程守护参数 --daemon
更改前:"start": "egg-scripts start --daemon --title=node-server",
更改后:"start": "egg-scripts start --title=node-server"
# Dockerfile 中引用了环境变量不生效
构建/部署阶段,服务还未就绪,此时无法引用环境变量。
# Dockerfile 中引用了 MySQL 内网地址不生效
构建/部署阶段,服务还未就绪,此时无法通过内网地址访问 MySQL。
# 使用了云调用/开放接口服务报错
请参考云调用常见问题 文档。
# Cannot read -C 'conf/nginx.conf' (relative to '/workspace')
无 Dockerfile 模式部署 PHP 服务时,请确保在代码仓库的 conf 文件夹中存在 nginx.conf 文件。可参考官方模板 。
# err=[ResourceUnavailable.ClusterInAbnormalStat][err=cloudrun cluster state is invalid(cluster state is deleted)
底层异常,请先尝试重新部署/删除服务后重新创建。如果还不能解决,请提工单联系我们处理。
# errMsg="CheckCloudBaseRunVpcDownVpc service status=create_fail"
底层异常,请先尝试重新部署/删除服务后重新创建。如果还不能解决,请提工单联系我们处理。
# DescribeCloudBaseRunServerVersion cluster not create
底层异常,请先尝试重新部署/删除服务后重新创建。如果还不能解决,请提工单联系我们处理。
# Insufficient account balance
当前账号已欠费,请冲正后重试。
# 部署 Docker Compose 失败
微信云托管不支持 Docker Compose。
# 构建失败问题
构建阶段问题多数为 docker 报错,绝大部分是因为没有正确配置 Dockerfile。
可参考构建案例集合 ,以及如何提高项目构建效率。或在网上搜索 docker 相关解决方案及教程。
# network connection aborted.
因为访问国外网络不稳定的不可抗力因素,建议尽量选用国内站作为镜像源下载依赖和扩展。具体可参考官方模板 中的 Dockerfile 写法。
# 缺少依赖报错。例如:
- java.lang.NoClassDefFoundError: Could not initialize class xxx
Dockerfile 中缺少对应的依赖安装命令。
建议优先换用更完整的构建用基础镜像而非直接增加依赖安装命令 (RUN apk xxx),更加简单方便,且可以提高构建速度。
请到dockerhub 官方仓库自行选择合适的基础镜像(默认已包含了所有你需要的依赖),然后在 Dockerfile 中替换"FROM xxxxx as build" 命令。
# xxxxxx: no such file or directory
- 确保代码仓库/代码包中确实存在该文件且路径正确;
- 确保'.gitignore'或者'.dockerignore'中,没有包含这个文件——如果包含将会被构建忽略。去除即可。
- 确保 Dockerfile 中的 COPY 命令,拷贝文件的时候没有修改原有的文件路径。
# 无报错日志,空白
大概率是构建超时(> 10 分钟)。可参考文档如何提高项目构建效率。
# 流水线问题
# 执行流水线失败
- 请尝试重新授权代码仓库。
- 检查对应腾讯云账号下的 Coding DevOps ( https://console.cloud.tencent.com/coding ) ,确认没有误删除掉 cloudbase 开头的团队。如已误删除,可以提交工单寻求协助恢复
# push 代码但未触发构建
- 检查「服务设置-流水线」中是否开启 push 触发构建,且分支是否匹配
- 检查是否误删 Git 平台 webhook 是否存在,如 webhook 存在,请查看最近一次回调详情,排查回调是否正常
| Git 平台 | webhook 查看 | 回调详情查看 |
|---|---|---|
| Gitee | ||
| GitHub |
- 如以上检查均无问题,可前往开发者社区、用户群反馈,也可提交工单