# 服务问题排查指引

# 服务运行中问题

# 一段时间不访问服务后,发现访问不通或访问速度明显变慢。再次访问后恢复/控制台服务状态显示:0 个实例(自动暂停)或服务启动中/报错:“connect ECONNREFUSED"或“SERVICE_NOT_RERADY”
  • 「服务设置」中,实例副本数最小值为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)
  • 如以上检查均无问题,可前往开发者社区、用户群反馈,也可提交工单