google 云数据流 VM 上的 jstack 和其他工具

jstack and other tools on google cloud dataflow VMs

有没有办法在为 Dataflow 作业创建的 VM 上运行 jstack? 我试图查看该作业花费大部分 CPU 时间的地方,但我找不到它已安装。

谢谢, G

我不熟悉 jstack,但基于快速 Google 搜索,jstack 似乎是一个 运行 独立于 JVM 的工具,只需要一个 PID。因此,您可以在 运行 工作期间执行以下操作。

  1. 使用 gcutil ssh
  2. ssh 进入其中一台虚拟机
  3. 在虚拟机上安装 jstack。
  4. 运行 ps -辅助 | grep java 识别 java 进程的 PID。
  5. 运行 jstack 使用您识别的 PID。

这对你有用吗?您是否正在尝试从您的代码中 运行 jstack 以便自动分析它?

我发现可行的解决方法:

  1. 登录机器
  2. 使用sudo docker ps
  3. 找到运行"python -m taskrunne"的docker容器
  4. 使用 sudo docker exec -i -t 9da88780f555 bash 连接到容器(将容器 ID 替换为在步骤 2 中找到的 ID)
  5. 使用 apt-get install openjdk-7-jdk
  6. 安装 openjdk-7-jdk
  7. 查找 java 可执行文件的进程 ID
  8. 运行 /usr/bin/jstack 1437

Github issue update 包括使用 --enableProfilingAgent 选项获取配置文件的一些基本说明。

这并没有回答您问题的 "and other tools" 部分,但是: Dataflow workers 运行 一个本地 http 服务器,你可以用它来获取一些信息。除了使用 jstack,您还可以通过以下方式获取线程转储:

curl http://localhost:8081/threadz