

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 检查点操作已超时
<a name="troubleshooting-chk-timeout"></a>

如果您的应用程序未经过优化或未正确配置，则检查点可能会失败。本节介绍这种情况的症状和故障排除步骤。

## 症状
<a name="troubleshooting-chk-timeout-symptoms"></a>

如果应用程序的检查点失败，则`numberOfFailedCheckpoints`将大于零。

检查点失败可能是由于直接故障（例如应用程序错误）或暂时性故障（例如应用程序资源耗尽）所致。检查您的应用程序日志和指标是否存在以下症状：
+ 您的代码中存在错误。
+ 访问应用程序的依赖服务时出错。
+ 序列化数据时出错。如果默认序列化程序无法序列化您的应用程序数据，则应用程序将失败。有关在应用程序中使用自定义序列化器的信息，请参阅 Apache Flink 文档中的[数据类型和序列化](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/fault-tolerance/serialization/types_serialization/)。
+ 内存不足错误。
+ 以下指标出现峰值或稳定增长：
  + `heapMemoryUtilization`
  + `oldGenerationGCTime`
  + `oldGenerationGCCount`
  + `lastCheckpointSize`
  + `lastCheckpointDuration`

有关监控检查点的更多信息，请参阅 Apache Flink 文档中的[监控检查点](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/ops/monitoring/checkpoint_monitoring/)。

## 原因和解决方案
<a name="troubleshooting-chk-timeout-causes"></a>

您的应用程序日志错误消息显示了直接失败的原因。暂时性故障可能有以下原因：
+ 您的应用程序的 KPU 配置不足。有关增加应用程序预置的信息，请参阅[实施应用程序扩展](how-scaling.md)。
+ 您的应用程序状态大小太大。您可以使用该`lastCheckpointSize`指标监控应用程序的状态大小。
+ 您的应用程序的状态数据在密钥之间的分布不均衡。如果您的应用程序使用`KeyBy`运算符，请确保传入的数据在密钥之间平均分配。如果将大部分数据分配给单个密钥，则会造成瓶颈，从而导致故障。
+ 您的应用程序面临内存或垃圾收集背压。监控应用程序的`heapMemoryUtilization`、`oldGenerationGCTime`、和`oldGenerationGCCount`是否出现峰值或稳步增加的值。