Google cloud dataflow 谷歌云数据流虚拟机上的jstack和其他工具

Google cloud dataflow 谷歌云数据流虚拟机上的jstack和其他工具,google-cloud-dataflow,Google Cloud Dataflow,有没有办法在为数据流作业创建的VM上运行jstack? 我正在尝试查看作业在哪里花费了大部分CPU时间,但我找不到它已安装 谢谢, G我不熟悉jstack,但基于谷歌的快速搜索,它看起来像是一个独立于JVM运行的工具,只需要一个PID。因此,您可以在作业运行时执行以下操作 使用gcutil ssh将ssh连接到其中一个vm中 在VM上安装jstack 运行ps-aux | grep java来识别java进程的PID 使用您识别的PID运行jstack 那对你有用吗?您是否试图在代码中运行jst

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

谢谢,
G

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

  • 使用gcutil ssh将ssh连接到其中一个vm中
  • 在VM上安装jstack
  • 运行ps-aux | grep java来识别java进程的PID
  • 使用您识别的PID运行jstack

  • 那对你有用吗?您是否试图在代码中运行jstack以便自动分析它?

    我发现一个可行的解决方法:

  • 登录到计算机
  • 使用
    sudo docker ps
  • 使用sudo docker exec-i-t 9da88780f555 bash连接到容器(用步骤2中的容器id替换容器id)
  • 使用
    apt get Install openjdk-7-jdk安装openjdk-7-jdk
  • 查找java可执行文件的进程id
  • 运行
    /usr/bin/jstack 1437
  • 这包括使用
    --enableProfilingAgent
    选项获取配置文件的一些基本说明。

    这并没有回答您问题中的“和其他工具”部分,但是: Dataflow workers运行本地http服务器,您可以使用该服务器获取一些信息。不使用jstack,您可以通过以下方式获得线程转储:

    curl http://localhost:8081/threadz
    

    这些工具是Oracle JDK的一部分(也应该在OpenJDK中),因此我希望它们是机器上Java安装的一部分,而不单独安装它们。我尝试安装OpenJDK-7-JDK包,显然它的jstack无法连接到Java进程。。。也许和docker有关。。