常见问题
性能相关
调用云函数耗时较长
可以通过排查云函数日志分析耗时位置。如果日志包含 Coldstart: xxxms 类日志,则为云函数冷启动耗时。如果希望解决该部分耗时,可以参考 预置并发。
云函数执行超时怎么处理?
超时客户端会直接断开连接并报错,建议控制函数执行时间,尽量不要把耗时 长的操作放在客户端直接调用的云函数内。
如果需要在云函数执行一些长耗时的处理怎么办?
为了保证客户端的体验,不允许直接调用长耗时的云函数。
- 建议在云控制台调整为需要的超时时间(上限为 60s),在云函数内使用 callback() 返回成功,客户端不等待执行结果。
- 云函数会在超时时间内继续执行直到完毕或超时,将执行结果写入数据库等存储服务,再在客户端获取该结果。
配置相关
调整云函数内存配置不生效
云函数配置对 $LATEST 版本生效。如果请求的不是 $LATEST 版本,则配置修改不会生效。
解决方案:
- 确保请求的是
$LATEST版本 - 或者基于
$LATEST版本发布新版本,新版本会使用当前的快照,包含代码和配置(超时时间、环境变量、内存配置等)
云函数内置模块怎么使用?
- 云函数内置模块已经集成于运行环境,可以直接使用。
- 如果内置模块的版本不能满足需求,可以自行安装模块到云函数内,默认会被优先使用。
目前已支持的内置模块为 request 2.87.1 。
云函数内怎么保存密钥等配置信息
云函数是无状态的,配置信息建议存储在云开发的数据库服务
部署相关
为什么云函数更新时,返回 exit status 11?
请检查一下函数的打包方式和入口方法。
- 云函数创建时,默认执行方法是 index.main ,其入口文件为 index.js ,且 index.js 必须用 export 暴露出 main 方法。
- 云函数更新时,如果选择用 zip 包上传, 打包的方式需要注意,要保证 zip 包解压后的第一级内容必须包含入口文件(常见的错误打包方式是,将某个云函数代码放在某个文件夹内,并针对这个文件夹进行压缩,这样解压出来的文件是一个文件夹,不包含入口文件 index.js )。
Windows 环境下打包云函数层部署失败
在 Windows 环境下打包云函数层(Layer)的 zip 文件后,部署到云函数时可能会遇到 An internal error has occurred 报错。
问题现象
在 Windows 系统下使用系统自带的压缩工具或 PowerShell 的 Compress-Archive 命令打包云函数层后,上传部署时报错:
函数更新失败
An internal error has occurred. Retry your request, but if the problem persists, contact us with details
问题原因
Windows 系统打包的 zip 文件,内部的路径分隔符使用的是反斜杠 \,而云函数的构建环境是 Linux 系统,要求路径分隔符为正斜杠 /。
这会导致 Linux 环境无法正确解析 zip 包中的文件路径,从而引发部署失败。
解决方案
方案一:使用 7-Zip 打包(推荐)
7-Zip 是一个开源的压缩工具,打包时会使用 Unix 风格的路径分隔符。
- 下载安装 7-Zip
- 右键选择要打包的文件夹
- 选择 "7-Zip" -> "添加到压缩包"
- 压缩格式选择 "zip"
方案二:使用 WSL 打包
如果已安装 WSL (Windows Subsystem for Linux),可以在 WSL 环境中使用 zip 命令打包:
# 进入 WSL 环境
wsl
# 进入层文件所在目录
cd /mnt/c/your/layer/path
# 使用 zip 命令打包
zip -r layer.zip ./*
方案三:使用 Git Bash 打包
Git for Windows 自带的 Git Bash 也可以使用 Unix 风格的 zip 命令:
# 打开 Git Bash,进入层文件目录
cd /c/your/layer/path
# 打包
zip -r layer.zip ./*
调试相关
云函数测试时,部分日志丢失了?
- 云函数测试时,如果以同步调用的方式(超时时间小于 20 秒),返回的日志最多为 4k,超过 4k 的日志不显示。
- 如果以异步调用的方式(超时时间大于或等于 20 秒),返回的日志最多为 6M,超过 6M 的日志不显示。