项目部署到阿里云“函数计算”,经过测试使用,发现偶尔返回类似以下错误:
{"errorMessage":"Process exited unexpectedly before completing request (duration: 0ms, maxMemoryUsage: 40.42MB)"}
项目在“函数计算”的部署环境使用的是“Custom Container”,运行着我自行构建的Docker镜像,
该镜像在我自己的服务器部署都一直运行正常,所以一时找不到引起该异常的原因。
我在网上搜索,发现也有网友提问,但都没有看到解决答案,所以记录一下,有需要朋友可参考!
我查看阿里的文档(https://help.aliyun.com/document_detail/179368.html?spm=a2c4g.11174283.6.607.20685212QJ9sNJ),
发现有以下说明:
HTTP Server配置要求
- 监听在任何IP(0.0.0.0)的指定端口(端口可以读取环境变量FC_SERVER_PORT,默认为9000)。
- HTTP Server需配置
connection keep-alive
。- 请求超时时间设置为15分钟以上。
- HTTP Server需要在25秒内启动完毕。
经过对比调整与测试,发现果然是这相关参数没有配置好,我配置好以后,到目前使用都正常,未发现错误!
我的主要环境有Node和PHP,下面分别说明修改的地方:
1、Node环境(ExpressJS)
我使用的是expressjs框架,所以修改的是 /bin/www文件,修改如下:
server.listen(port);
server.timeout = 15*60*1000; //0表示永不超时
server.keepAliveTimeout = 15*60*1000; //0表示永不超时
2、PHP环境(Apache2+PHP7)
在 apache2.conf 文件内,配置以下项:
Timeout 900
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 900
在php.ini文件内,配置以下项:
max_execution_time = 900
以上是我情况的解决方法,如果你有类似"Process exited unexpectedly before completing request "的异常可参考;
引起这异常,还有可能是函数本身逻辑有问题,导致执行环境退出,或者调用函数的 client 端主动 cancel 导致等。
(完)