# 服务问题排查指引

# 服务运行中问题

# 一段时间不访问服务后,发现访问不通或访问速度明显变慢。再次访问后恢复/控制台服务状态显示: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 进行调试,直接转到云托管部署时可能遇到以下情况:

  1. 本地运行的时候,各种依赖组件、扩展在本地都是齐全的,但是没有在 Dockerfile 正确添加依赖安装命令,所以本地运行时不缺依赖没问题,部署到云托管上时就会因为缺乏依赖导致报错。
  2. 本地运行的时候,连接的是本地数据库(地址为本机 IP 或 localhost),部署到云托管上时没有将数据库地址改为云上的数据库地址。导致因为数据库无法连接而部署失败。
  3. 本地使用的运行时环境(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
  • 如以上检查均无问题,可前往开发者社区、用户群反馈,也可提交工单