

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 應用程式正在重新啟動
<a name="troubleshooting-rt-restarts"></a>

如果您的應用程式運作狀況不正常，其 Apache Flink 作業就會持續失敗並重新啟動。本節說明此狀況的徵狀和疑難排解步驟。

## 徵狀
<a name="troubleshooting-rt-restarts-symptoms"></a>

這種情況可能有下列徵狀：
+ `FullRestarts` 指標不為零。此指標代表自您啟動應用程式後，應用程式作業已重新啟動的次數。
+ `Downtime` 指標不為零。此指標代表應用程式處於 `FAILING` 或 `RESTARTING` 狀態的毫秒數。
+ 應用程式日誌包含狀態變更 (變更為 `RESTARTING` 或 `FAILED`)。您可以使用下列 CloudWatch Logs Insights 查詢，來查詢您的應用程式日誌中是否有這些狀態變更：[分析錯誤：應用程式任務相關的失敗](cloudwatch-logs-reading.md#cloudwatch-logs-reading-apps)。

## 原因和解決方案
<a name="troubleshooting-rt-restarts-causes"></a>

下列情況可能會導致您的應用程式變得不穩定並重複重新啟動：
+ **運算子擲回例外狀況：**如果應用程式中運算子中的任何例外狀況未處理，應用程式會容錯移轉 （透過解譯運算子無法處理失敗）。應用程式會從最新的檢查點重新啟動，以維護「恰好一次」的處理語義。因此，`Downtime` 在這些重新啟動期間不為零。為了防止這種情況發生，我們建議您處理應用程式程式碼中的任何可重試的例外狀況。

  您可以查詢應用程式日誌中是否包含從 `RUNNING` 到 `FAILED` 的應用程式狀態變更，以調查此情況的原因。如需詳細資訊，請參閱[分析錯誤：應用程式任務相關的失敗](cloudwatch-logs-reading.md#cloudwatch-logs-reading-apps)。
+ **未正確佈建 Kinesis 資料串流：**如果您應用程式的來源或目的地是 Kinesis 資料串流，請檢查串流的[指標](https://docs.aws.amazon.com/streams/latest/dev/monitoring-with-cloudwatch.html)是否有 `ReadProvisionedThroughputExceeded`或 `WriteProvisionedThroughputExceeded`錯誤。

  如果看到這些錯誤，您可以增加串流的碎片數目，以增加 Kinesis 串流的可用輸送量。如需詳細資訊，請參閱[如何變更 Kinesis Data Streams 中的開放碎片數目？](https://aws.amazon.com/premiumsupport/knowledge-center/kinesis-data-streams-open-shards/)
+ **其他來源或接收器未正確佈建或不可用：**確認應用程式是否正確佈建來源和接收器。檢查應用程式中使用的任何來源或接收器 （例如 AWS 其他服務，或外部來源或目的地） 是否已妥善佈建、未遇到讀取或寫入限流，或是否定期無法使用。

  如果您遇到相依服務的輸送量相關問題，請增加這些服務的可用資源，或調查任何錯誤或無法使用的原因。
+ **運算子未正確佈建：**如果應用程式中其中一個運算子的執行緒上的工作負載未正確分配，則該運算子可能會超載，而應用程式可能會損毀。如需調整運算子平行處理的相關資訊，請參閱[適當管理運算子擴展](performance-improving.md#performance-improving-scaling-op)。
+ **應用程式失敗，出現 DaemonException：**如果您使用的是 1.11 之前的 Apache Flink 版本，此錯誤會出現在應用程式日誌中。您可能需要升級至更新版本的 Apache Flink，以便使用 0.14 或更新版本的 KPL。
+ **應用程式失敗，出現 TimeoutException、FlinkException 或 RemoteTransportException：**如果任務管理員損毀，這些錯誤可能會出現在應用程式日誌中。如果應用程式超載，任務管理員可能會遇到 CPU 或記憶體資源壓力，導致它們失敗。

  這些錯誤可能如下所示：
  + `java.util.concurrent.TimeoutException: The heartbeat of JobManager with id xxx timed out`
  + `org.apache.flink.util.FlinkException: The assigned slot xxx was removed`
  + `org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager`

  若要疑難排解此狀況，請檢查下列各項：
  + 檢查 CloudWatch 指標以了解 CPU 或記憶體用量是否出現異常尖峰。
  + 檢查應用程式以了解是否有輸送量問題。如需詳細資訊，請參閱[對效能問題進行故障診斷](performance-troubleshooting.md)。
  + 檢查應用程式日誌以了解是否有應用程式程式碼所引發的未處理例外狀況。
+ **應用程式失敗，出現「找不到 JaxbAnnotationModule」錯誤：**如果應用程式使用 Apache Beam，但沒有正確的相依性或相依性版本，則會發生此錯誤。使用 Apache Beam 的 Managed Service for Apache Flink 應用程式必須使用以下版本的相依性：

  ```
  <jackson.version>2.10.2</jackson.version>
  ...
  <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-jaxb-annotations</artifactId>
      <version>2.10.2</version>
  </dependency>
  ```

  如果您未提供正確的 `jackson-module-jaxb-annotations` 版本作為明確的相依性，應用程式會從環境相依性載入該版本，而由於版本不相符，應用程式會在執行期損毀。

  如需將 Apache Beam 與 Managed Service for Apache Flink 搭配使用的詳細資訊，請參閱[使用 CloudFormation使用 Apache Beam 建立應用程式](examples-beam.md)。
+ **應用程式失敗，並顯示 java.io.IOException：網路緩衝區數目不足**

  當應用程式為網路緩衝區配置的記憶體不足時，就會發生這種情況。網路緩衝區可協助子任務之間的通信。它們用於在透過網路傳輸之前存儲記錄，並在將其解析為記錄並移交給子任務之前存儲傳入的資料。所需的網路緩衝區數目可直接根據作業圖表的平行處理層級和複雜度擴展。有許多方法可以緩解此問題：
  + 您可以設定較低的 `parallelismPerKpu`，以便為每個子任務和網路緩衝區配置更多記憶體。請注意，降低 `parallelismPerKpu` 會增加 KPU，因此會增加成本。為了避免這種情況，您可以按相同係數降低平行處理層級來保持相同數量的 KPU。
  + 您可以減少運算子的數目或將它們鏈結起來，以減少所需的緩衝區來簡化作業圖表。
  + 否則，您可以聯絡 https://aws.amazon.com/premiumsupport/ 進行自訂網路緩衝區組態。