函数计算提供实例级别的事件,通过实例级别事件您可以了解函数实例完整的生命周期,包括实例构建、销毁的流程以及其中各步骤发生的时间点。本文介绍函数实例的生命周期以及实例级别事件的定义、转移流程、类型和查询方式。
函数实例的生命周期
函数实例会根据函数当前的请求调用量动态地按需构建与销毁,每个函数实例的生命周期包括实例构建(Creating)、实例运行(Running)和实例销毁(Destroying)阶段,如下图所示。
实例构建(Creating)
实例构建,是指函数计算根据您的函数配置为您构建函数实例,包括加载代码或层加载(或拉取镜像)、启动实例和运行Initializer回调程序。实例构建步骤示意图如下所示。
实例构建一般在以下两种情况下发生。
弹性扩容:若函数当前的实例已经满载,随着调用请求量的继续增加,函数计算会构建新的实例来处理请求,但会造成冷启动。更多信息,请参见函数计算冷启动优化最佳实践。
预留配置调整:当您使用弹性管理功能配置了预留实例,函数计算会按照您的配置在调用请求到来之前预先构建实例,避免造成冷启动。关于弹性管理功能,请参见弹性管理(含预留模式)。
实例运行(Running)
实例运行期间,会调用您的函数处理程序处理调用请求。您可以设置实例并发度调整实例处理请求的策略,还可以使用PreFreeze回调程序进行编程模型扩展。更多信息,请参见编程模型扩展。关于实例并发度,请参见设置实例并发度。
函数计算只在实际请求和回调程序执行时计费,在请求以外的时间段内实例会被冷冻。
实例销毁(Destroying)
在此阶段,实例彻底被销毁。您可以使用PreStop回调程序进行编程模型扩展。
实例销毁一般在以下三种情况下发生。
实例闲置:如果实例在一段时间内没有收到任何调用请求,函数计算会自动回收该实例。
预留配置调整:当您缩减预留实例数量时,函数计算会立即为您销毁多余的实例。
实例异常:如果实例在构建或运行阶段出现了异常,函数计算会销毁该实例。
什么是实例级别事件
事件是一种描述资源状态变化的数据记录。实例是函数计算为执行您的请求而构建的核心资源,函数计算系统会动态地构建与销毁实例,从而弹性地处理您的请求。函数计算将您的实例发生各个重要状态变化的时间点定义为各类事件,并支持在实例详情页面进行可视化展示。通过实例级别事件,您不仅可以观察到实例的生命周期,还可以快速定位由实例导致的请求执行异常。
事件的相关状态和转移流程
事件标记了资源状态变化的时间点,因此每种事件分别至少与一种可定义的前置状态和后置状态相关。
函数实例的状态转移以及相关事件示意图如下所示。
函数实例的状态如下所示。状态转移相关事件的详细信息,请参见事件类型。
Creating:您的实例正在构建中。实例会根据函数当前的请求调用量动态地按需构建,该状态包含以下子状态。
镜像拉取(ImagePulling):正在拉取您的镜像(Custom Container运行环境)。
代码加载(CodePreparing):正在拉取并挂载您的代码包。
层加载(LayerPreparing):正在拉取并挂载您的层。
实例启动(RuntimeInitializing):正在启动您的实例并进行健康检查。
Initializer执行(Initializing):正在执行您的Initializer回调程序。
构建完成(Finished):您的实例构建完成。
构建失败(Failed):您的实例构建失败。
Running:您的实例正在运行中。此状态下的实例会处理函数的调用请求。
Destroyed:您的实例已经被销毁。实例会根据函数当前的请求调用量动态地按需销毁。
Error:您的实例当前不能正常处理调用请求,即将被销毁。
事件类型
事件名称 | 事件等级 | 事件含义 | 解决方案 |
实例构建中 fc:Instance:Creating | Normal | 函数计算开始为您的请求构建所需实例。 | 不涉及。 |
代码加载就绪 fc:Instance:PrepareCodeSuccess | Normal | 函数计算成功地将您的代码包拉取并挂载到实例中。 说明 函数计算针对代码包加载过程进行了多种优化,部分条件下,用时极短。 | 不涉及。 |
代码加载失败 fc:Instance:PrepareCodeFailed | Warning | 函数计算未能成功地将您的代码包拉取并挂载到实例中。 | 请加入钉钉用户群(钉钉群号:11721331)获取技术支持。 |
层加载就绪 fc:Instance:PrepareLayerSuccess | Normal | 函数计算成功地将层拉取并挂载到实例中。 说明 函数计算针对层加载过程进行了多种优化,部分条件下用时极短,且与代码加载同时进行。 | 不涉及。 |
层加载失败 fc:Instance:PrepareLayerFailed | Warning | 函数计算未能成功地将层拉取并挂载到实例中。 | 请加入钉钉用户群(钉钉群号:11721331)获取技术支持。 |
镜像准备就绪 fc:Instance:PullImageSuccess | Normal | 函数计算已成功拉取您的Custom Container实例镜像。 | 不涉及。 |
镜像准备失败 fc:Instance:PullImageFailed | Warning | 函数计算未能成功拉取您的Custom Container实例镜像。 | 请加入钉钉用户群(钉钉群号:11721331)获取技术支持。 |
实例启动成功 fc:Instance:RuntimeInitializationSuccess | Normal | 函数计算已成功启动您的实例并完成了健康检查。 | 不涉及。 |
实例启动失败 fc:Instance:RuntimeInitializationFailed | Warning | 函数计算发现您的实例在启动后未能通过健康检查。 | 建议您参考实例日志并结合Custom Runtime错误排查方法解决该问题。关于Custom Runtime错误排查,请参见错误处理。 |
Initializer执行成功 fc:Instance:InitializationSuccess | Normal | 您的Initializer回调程序执行成功。 | 不涉及。 |
Initializer执行失败 fc:Instance:InitializationFailed | Warning | 您的Initializer回调程序执行失败。 | 建议您根据请求日志调整Initializer回调程序的逻辑。 |
实例构建成功 fc:Instance:CreateSuccess | Normal | 您的实例构建成功,即将开始处理调用请求。 | 不涉及。 |
实例构建失败 fc:Instance:CreateFailed | Warning | 您的实例构建失败,即将被销毁。 | 不涉及。 |
实例已销毁 fc:Instance:DestroySuccess | Normal | 您的实例已经被销毁。 | 不涉及。 |
查询实例级别事件
开启实例级别指标后,函数计算会收集实例的事件信息。该信息将被投递到您在配置日志时选择的日志仓库中,您可以通过以下方式查看实例级别事件信息。关于开启实例级别指标的具体操作,请参见配置实例级别指标。