【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
问题描述
使用Azure App Service,也可以部署一个Java程序作为Web Job运行。运行一个 .Jar 文件只需要以下4步:
1)把Java应用打包成一个 .jar 文件
2)创建一个 run.bat文件,并在文件中设置PATH 和 java -jar运行命令,内容如下:
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版本。
所以第一步就是需要修改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 进程)。
(如上图中显示,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 WebApp:https://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 Azure: https://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 应用服务】在Azure App Service for Windows 中部署Java/NodeJS/Python项目时,web.config的配置模板内容
- 【应用服务 App Service】在Azure Web App的部署文件中,是否可以限制某些文件无法被访问?(如json)
- 【Azure 应用服务】App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot。 这个是因为什么?
- 【Azure 应用服务】App Service for Container中配置与ACR(Azure Container Registry)的RABC权限
- 【Azure 应用服务】基于Azure的CI/CD工具链部署App Service
- 【Azure App Service For Container】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
- 【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法
- 【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
- 【Azure 应用服务】App Service站点Header头中的中文信息显示乱码?当下载文件时,文件名也是乱码?
- 【Azure 应用程序见解】在Azure门户中,创建App Service(应用服务)时,无法一起创建Application Insights的问题
- 【Azure 应用服务】App Service 默认开放端口说明, 如何禁用Web app的端口号?
- Create an ASP.NET web app in Azure App Service
- [New Portal]Windows Azure Web Site (5) 如何选择Windows Azure托管服务的类型?WebSite, Cloud Service还是Virtual Machine
- 【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
- sql server webservice 服务应用及验证
- Windows Azure Cloud Service (31) 视频: 如何将Web 应用迁移到Windows Azure平台
- windows azure Vm、cloud service、web application 如何选择可用的服务
- 在 UWP 应用中创建、使用、调试 App Service (应用服务)
- 在 UWP 应用中创建、使用、调试 App Service (应用服务)
- Web应用程序如何应用报表服务来展现报表内容(实例基于SQL Server 2005 Report Service)