场景介绍
jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等。线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没有响应的线程到底在后台做什么事情,或者等待什么资源。在实际运行中,如果每次 dump都指向同一个问题,我们就可以确定问题的典型性。 此时我们需要把dump下载后做分析,本文主要介绍通过OOS下载JVM堆栈到OSS。
解决方案
我们准备一台已安装JAVA和JETTY的ECS实例。远程连接进入管理终端。启动Jetty。查看JAVA进程。
登录OOS控制台。如果您之前从未开通过OOS服务,请点击“立即开通”按钮,即可一键开通。OOS运维编排是安全免费的服务,请放心开通。
开通后进入运维编排界面,点击自定义模板,点击创建模板按钮。
在创建模板页面Yaml栏中粘贴以下模板。
FormatVersion: OOS-2019-06-01
Dsacription: Download JVM dump to OSS.
Parameters:
pid:
Description: The ID of Process.
Type: String
jstackUrl:
Description: Complete path of the jstack in linux instance.
Type: String
outputFile:
Description: Complete path of the output file in linux instance.
Type: String
instanceId:
Description: The ID of ECS Instance.
Type: String
MaxLength: 30
MinLength: 1
instanceRole:
Description: The ramRole attached on the instance.
Type: String
destUrl:
Description: Target directory for file copy in OSS.
Type: String
OOSAssumeRole:
Description: The RAM role to be assumed by OOS.
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: runcommnd
Action: ACS::ECS::RunCommand
Properties:
commandContent: '{{ jstackUrl }}/jstack -l {{ pid }} > {{ outputFile }}'
instanceId: '{{ instanceId }}'
commandType: RunShellScript
- Name: copyInstanceFileToOSS
Action: ACS::ECS::CopyLinuxInstanceFileToOSS
Properties:
instanceId: "{{ instanceId }}"
instanceRole: "{{ instanceRole }}"
srcUrl: "{{ outputFile }}"
destUrl: "{{ destUrl }}"
Outputs:
result:
Type: String
ValueSelector: result
Outputs:
result:
Type: String
Value: "{{ copyInstanceFileToOSS.result }}"
输入模板名称,点击创建模板。
在自定义模板页面找到刚创建的模板,点击创建执行,选择自动执行,点击下一步。
参数设置页面需要输入以下参数:
参数说明:
- pid: java进程ID
- jstackUrl:jstack的路径
- outputFile: 堆栈在实例中输出的文件的完整路径
- instanceId:实例ID
- instanceRole:挂载到实例的RAMRole名称
- destUrl:OSS中存入堆栈的路径
确认参数无误后点击创建执行。在执行详情页面可以看到模板执行的详细过程。
执行完成后在OSS中查看堆栈文件。
堆栈文件部分内容如下:
欢迎使用OOS
OOS客户支持钉钉群:23330931
OOS管理控制台的链接
OOS帮助文档的链接
系列文章
主题文章
最佳实践
玩转运维编排服务的权限:Assume Role+Pass Role
场景系列
运维编排场景系列----更新ECS镜像
运维编排场景系列-----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组
运维编排场景系列----检测MFA功能状态
阿里云运维编排新功能:一键批量克隆ECS
运维编排场景系列-----每日统计多Region实例的运行状态
运维编排场景系列-----如何使用jq
运维编排场景系列----分批到机器上运行命令