1

有没有办法在为 Dataflow 作业创建的虚拟机上运行 jstack?我正在尝试查看作业在哪里花费了大部分 CPU 时间,但我找不到它已安装。

谢谢,G

4

4 回答 4

1

我发现可行的解决方法:

  1. 登录机器
  2. 使用以下命令查找运行“python -m taskrunne”的 docker 容器sudo docker ps
  3. 使用连接到容器sudo docker exec -i -t 9da88780f555 bash(将容器 id 替换为在步骤 2 中找到的那个)
  4. 使用安装 openjdk-7-jdkapt-get install openjdk-7-jdk
  5. 查找 java 可执行文件的进程 ID
  6. /usr/bin/jstack 1437
于 2015-01-06T15:10:15.500 回答
1

Github 问题更新--enableProfilingAgent包括一些使用该选项获取配置文件的基本说明。

于 2016-02-19T01:38:15.480 回答
1

这不能回答您问题的“和其他工具”部分,但是:Dataflow 工作人员运行一个本地 http 服务器,您可以使用它来获取一些信息。您可以使用以下方法获取线程转储,而不是使用 jstack:

curl http://localhost:8081/threadz
于 2018-05-17T17:27:26.503 回答
0

我对 jstack 不熟悉,但根据 Google 的快速搜索,看起来 jstack 是一个独立于 JVM 运行的工具,只需要一个 PID。因此,您可以在作业运行时执行以下操作。

  1. 使用 gcutil ssh SSH 进入其中一个虚拟机
  2. 在虚拟机上安装 jstack。
  3. 运行 ps -aux | grep java 来识别java进程的PID。
  4. 使用您确定的 PID 运行 jstack。

这对你有用吗?您是否尝试从代码中运行 jstack 以自动对其进行分析?

于 2015-01-05T18:49:39.037 回答