调试任务

任务启动了吗?

要确定您的任务是否已正确执行,请转到 UI 的“任务执行”页面,或在 shell 中键入 task execution list。找到任务启动的任务执行条目。

下图显示了如何处理任务启动错误

No
Yes
Yes
No
Yes
No
Task execution has start date?
Task failed to launch
Task has End Date
Task has proper Exit Code
Task is running
Task was successful
Task launched but execution returned failure code

如果任务启动失败,需要检查什么

如果任务启动失败

  • 确保使用的是特定发行版本的最新 GA。
  • 确保您选择的平台至少满足最低支持版本。
  • 在 SCDF 中启动任务或批处理应用程序之前,请确保该应用程序已作为独立应用程序成功执行。 在继续之前,请参阅调试批处理应用程序

SCDF 负责启动任务。 任务启动失败消息通常可以在 SCDF 应用程序日志中找到。

平台

本节介绍如何对特定平台上的问题进行故障排除

  • 本地
  • Cloud Foundry
  • Kubernetes

本地

本节介绍如何对在本地运行的应用程序进行故障排除

下图显示了如何处理本地任务启动错误

No
Yes
Yes
No
Yes
No
Start Locally?
Exceptions in SCDF?
Resolve exceptions
Exceptions in app logs?
Resolve exceptions
Raise log levels
Enable debug

您可以逐个应用程序地检查应用程序日志文件。 要将所有应用程序的日志聚合到一个文件中,可以设置 inheritLogging=true 部署程序属性。 有关更多信息,请参阅“是否可以将本地部署聚合到单个日志中?”,以及有关如何启用更多日志输出的信息,请参阅“如何为平台部署启用 DEBUG 日志?”

您可以通过设置 debugPort 部署程序属性来启用使用 JDWP 调试应用程序。 有关更多信息,请参阅“如何远程调试已部署的应用程序?”

Docker Compose - 启动

下图展示了如何处理涉及 Docker Compose 启动问题的本地任务启动错误。

No
Yes
No
DATAFLOW_VERSION defined?
SKIPPER_VERSION defined?

DATAFLOW_VERSIONSKIPPER_VERSION 环境变量必须通过 export 命令在当前终端环境中可用,或者作为前缀添加到 docker-compose 命令中。更多信息,请参阅启动 Docker Compose

Docker Compose - 运行时

下图展示了如何处理涉及 Docker Compose 运行时问题的本地任务启动错误。

Yes
No
Yes
Low Resources?
Increase Docker Resources
Exceptions in app logs?
Resolve exceptions

默认情况下,分配给 Docker 的内存量可能过低。建议分配的内存量为 8GB。docker stats 命令可以提供有关资源使用情况的有用信息。如果应用程序因资源限制而无法启动,请增加资源分配。有关您平台的更多信息,请参阅Docker 文档

当任务通过 SCDF 启动时,作为该任务定义一部分的应用程序将在 SCDF 容器上作为 Java 进程启动。对于任务定义的每个部分,都会启动一个应用程序。提供给 Docker 的总体资源分配(内存、CPU 和其他资源)应考虑启动的应用程序数量。

Cloud Foundry

本节介绍如何对 Cloud Foundry 上的应用程序问题进行故障排除。

启动失败

下图展示了如何处理在 Cloud Foundry 上运行的应用程序的启动失败。

No
Yes
No
Verify Manifest
Verify environment variables
Service instances running?
Exceptions in SCDF logs?
View logs and resolve errors

应用程序故障

下图展示了如何处理在 Cloud Foundry 上运行的应用程序的应用程序故障

No
No
Applications Started?
Errors in SCDF logs?
Errors in app logs?
Resolve

调试部署问题时,提高部署器相关和 Cloud Foundry 相关的日志级别可能会有所帮助。有关更多信息,请参阅"如何为平台部署启用 DEBUG 日志?"

Kubernetes

本节介绍如何对 Cloud Foundry 上的应用程序问题进行故障排除。

分布式部署文件

下图展示了如何处理在 Kubernetes 上运行的应用程序的分布式部署文件导致的故障

No
Yes
No
Yes
Yes
Yes
Yes
All files applied including RBAC?
External Services Running
Exceptions in SCDF pod logs?
Exceptions in app pod logs?
Resolve

下图展示了如何处理在 Kubernetes 上运行的应用程序的 Helm 图表故障

Helm 图表

No
Yes
No
Yes
Yes
Chart found?
helm repo update
Expected Services Running?
Exceptions in SCDF pod logs?
Resolve

在任务执行 ID 之前创建了一个空的任务执行 ID 记录

Yes
No
Yes
Yes
Yes
No
No
Are their more than one data sources?
Verify that the task app is using correct datasource
Is Docker Container on Kubernetes?
Are you using entry point of shell in container?
Are you using default entry point style
Launch task with 'entryPointStyle' deployer property with value of 'shell'
Execute 'kubectl describe pod name'
Verify that your shell is passing SPRING_CLOUD_TASK_EXECUTIONID to the task app
Verify that you are not passing spring.cloud.task.executionid
Data Flow does this for you

如果您的任务没有使用正确的属性启动,您可以按照此决策树进行操作。

常规

下图展示了如何处理在 Kubernetes 上运行的应用程序的常规故障

Yes
Yes
Errors in pod events table?
Resolve
Exceptions in app pod logs?

描述 Pod 时,“events”表部分在调试时提供了有用的信息,可以通过以下命令调用

kubectl describe po/pod_name

例如,成功启动的 timestamp-batch-task 应用程序的事件类似于

Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  15s   default-scheduler  Successfully assigned default/timestamp-7138z511d8 to minikube
  Normal  Pulled     15s   kubelet, minikube  Container image "springcloudtask/timestamp-batch-task:latest" already present on machine
  Normal  Created    14s   kubelet, minikube  Created container
  Normal  Started    14s   kubelet, minikube  Started container

可以对应用程序日志进行跟踪以观察传入的日志,如下所示

kubectl logs -f po/pod_name

故障排除帮助

如果这些故障排除方法均未解决您的问题,并且您仍然需要帮助,您可以访问 StackOverflow 并提供相关详细信息(请参阅:Wiki)。我们会积极关注论坛帖子。