如何获取Dataflow Python进程的线程转储?

时间:2018-05-10 17:25:07

标签: python google-cloud-dataflow apache-beam

当Dataflow工作者陷入困境时,能够获得工作者遇到问题的Python进程的线程转储会很有帮助。

我如何识别并获取卡住的Python进程的threadz转储?

1 个答案:

答案 0 :(得分:0)

  1. SSH into the worker machine

  2. 运行docker ps。示例输出可能如下所示:

    CONTAINER ID   IMAGE                                ... NAMES
    ...
    0649a3f76a4a   dataflow.gcr.io/v1beta3/python:2.4.0 ... k8s_python.b30867f0_dataflow-wordcount-ma-07022224-6ad4-harness-r7cy_default_a9d4faf05c7e404114002f06ca702ecc_6e2cabdf
    ...
    

    请注意名为...python...的容器的CONTAINER ID。

  3. 使用docker exec -it $CONTAINER_ID bash

  4. 登录容器
  5. 使用以下命令在工作日志中找到工作进程的threadz端口:

    cat /var/log/dataflow/python-dataflow-*-json.log | grep 'Status HTTP server'

    示例输出可能如下所示:

    {"severity": "INFO",..., "message": "Status HTTP server running at localhost:37735", "logger": "root:batchworker.py:status_server"}
    

    请注意,可能有多个工作进程在运行,每个进程都有自己的threadz端口。

  6. threadz的{​​{1}}内容示例。