如何在 Azure 应用服务上进行线程转储?

How to do a thread dump on Azure App Service?

我有一个 Azure 应用服务 运行 Tomcat 8.5,但似乎不知道如何进行线程转储。 jstack 在控制台和 DebugConsole 中都无法识别。

在 Azure App Service 上,Java 的所有流行版本都已安装在路径 D:\Program Files (x86)\Java 中。以1.8.0u73版本为例,见下图

您可以通过 Kudu 控制台工具命令 set PATH=D:\Program Files (x86)\Java\jdk1.8.0_73\bin;%PATH% 将 Java 工具临时添加到环境中。然后,jstack 工具在当前 Kudu 会话中可用。

受前面答案的启发,我创建了以下 bat 脚本(我想可能是 powershell)来完成这项工作:

powershell -Command "get-process java |select -expand id" > pid.txt
set /p id= < pid.txt
"%JAVA_HOME%\bin\jstack" -F %id% > out.txt

它使用您在应用中使用的 java 版本 (JAVA_HOME),并且不需要您的任何输入。这很简单并且可以解决问题。例如,只需在您的 wwwroot 中创建一个 bat 文件,然后随时 运行 它。