当Dataflow工作者陷入困境时,能够获得工作者遇到问题的Python进程的线程转储会很有帮助。
我如何识别并获取卡住的Python进程的threadz转储?
答案 0 :(得分:0)
运行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。
使用docker exec -it $CONTAINER_ID bash
。
使用以下命令在工作日志中找到工作进程的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
端口。
threadz
的{{1}}内容示例。