【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法

问题描述

使用Azure App Service,也可以部署一个Java程序作为Web Job运行。运行一个 .Jar 文件只需要以下4步:

1)打包一个 .jar 文件

2)创建一个 run.bat文件,并在文件中设置PATH 和 java -har运行命令,内容如下:

set PATH=%PATH%;%JAVA_HOME%/bin
java -jar filename.jar

3)把 run.bat 和 .jar文件打包为一个 .zip 文件。

4)在App Service的Web Job页面中创建Job后,上传 .zip 文件。

如何在App Service中创建 Web Job可以参考官网: https://docs.azure.cn/zh-cn/app-service/webjobs-create#overview

 

在创建 Java .jar的web job成功运行后,在App Service的CPU监控中发现,实例CPU一直处于100%。如何来定位到具体线程?发现具体的故障呢?答案是:需要抓取消耗CPU高的进程的DUMP文件。本文就是介绍如何在App Service中,抓取Java版Web Job的DUMP文件

 

问题分析

因为Java的DUMP文件需要在JDK的运行环境中才能通过 jstack  命令来抓取,而App Service默认使用的是 jre。在App Service的高级管理工具(Kudu)可以查看到当前的Java_Home查看到所使用的Jre版本。

【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法

 

 

所以第一步就是需要修改Java的运行时版本。

 

第一步:需要修改run.bat文件,使用JDK来运行Java Web Job。把此前所使用的相对路径(依赖JAVA_HOME)变为绝对路径 "D:\Program Files\Java\jdk1.8.0_172\bin\java.exe" -jar filename.jar

 

第二步:等待 .jar Web Job运行后,到进程浏览器中查询相关java进程的id (注意是web job的javb 进程)。

【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法

 

(如上图中显示,Web Job的Java进程号为12996) 

第三步:进入到 Logfiles 目录下,使用以下命令抓取 DUMP,查看进程内部的线程情况(输出内容在thread.txt文件中)。

"C:\Program Files\Java\jdk1.8.0_172\bin\jstack" 12996 >> D:\home\LogFiles\thread.txt

 

 

参考资料

在 Azure 应用服务中使用 WebJobs 运行后台任务: https://docs.azure.cn/zh-cn/app-service/webjobs-create#overview

Uploading a JAR file as WebJob in a WebApphttps://social.msdn.microsoft.com/Forums/azure/en-US/65669732-14f1-431a-b74a-36630bf800a4/uploading-a-jar-file-as-webjob-in-a-webapp?forum=windowsazurewebsitespreview

Executing Java Web Jobs on Azurehttps://docs.microsoft.com/zh-cn/archive/blogs/azureossds/executing-java-web-jobs-on-azure

如何为 Web 应用配置自定义 Tomcat 环境: https://docs.azure.cn/zh-cn/articles/azure-operations-guide/app-service-web/aog-app-service-web-howto-configure-custom-tomcat-environment

 

【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法

上一篇:路面裂痕检测YOLO算法、目标检测算法实现地面裂缝检测


下一篇:将list集合,元素随机打乱