文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

分享一款JVM线程堆栈在线分析工具

2023-06-02 23:25

关注

JVM大家可能都知道是个什么玩意-Java虚拟机,但是到底是个什么鬼?相信即使工作3-5年的程序员可能也不大了解。

如题所述,今天与大家分享的是如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题。线程堆栈分析尽管不是初学者一门必备的技术,但是对于自身走向高程来说应该是必备的傍身技能。

哎...内存又溢出了,唉...?怎么突然CPU200%了等等一系列的问题都需要从线程堆栈中存储的信息找到问题所在。

分享一款JVM线程堆栈在线分析工具

JVM 线程堆栈

首先我们了解一下JVM 线程堆栈——它是什么?

JVM线程堆栈是一个给定时间的快照,它能向你提供所有被创建出来的Java线程的完整清单.

每一个被发现的Java线程都会给你如下信息:

– 线程的名称;经常被中间件厂商用来识别线程的标识,一般还会带上被分配的线程池名称以及状态 (运行,阻塞等等.)

– 线程类型 & 优先级,例如 : daemon prio=3 中间件程序一般以后台守护的形式创建他们的线程,这意味着这些线程是在后台运行的;它们会向它们的用户提供服务,例如:Java EE应用程序

– Java线程ID,例如 : tid=0x000000011e52a800 这是通过 java.lang.Thread.getId() 获得的Java线程ID,它常常用自增长的长整形 1..n 实现

– 原生线程ID,例如 : nid=0x251c ,原生线程ID可以让你获得诸如从操作系统的角度来看那个线程在你的JVM中使用了大部分的CPU时间等这样的相关信息

– Java线程状态和详细信息,例如: waiting for monitor entry [0xfffffffea5afb000] java.lang.Thread.State: BLOCKED (on object monitor)可以快速的了解到线程状态极其当前阻塞的可能原因

– Java线程栈跟踪;这是目前为止你能从线程堆栈中找到的最重要的数据. 这也是你花费最多分析时间的地方,因为Java栈跟踪向提供了你将会在稍后的练习环节了解到的导致诸多类型的问题的根本原因,所需要的90%的信息。

问题描述

linux系统下,线上环境Tomcat进程CPU突然飙升到200%

问题解决

查找对应Tomcat进程号

ps -ef|grep tomcat8_itstyle

导出堆栈信息,查询进程PID为8564

jstack -l 8564 >  8564.stack

下载8564.stack并打包为zip格式上传到GCeasy,生成分析报告如下: 

分享一款JVM线程堆栈在线分析工具

吃不吃精,喜不喜欢,界面话报告分析,总有一项让你喜欢。

扩展阅读

jps命令

jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程以及进程id。 jps 也是一样,它的作用是显示当前系统的java进程情况及进程id。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个java虚拟机实例),并可通过opt来查看这些进程的详细启动参数。

命令格式:jps [options ] [ hostid ]

[options]选项 : -q:只显示pid,不显示class名称,jar文件名和传递给main 方法的参数 -m:输出main method的参数 -l:输出完全的包名,应用主类名,jar的完全路径名 -v:输出jvm参数

jstack命令

命令格式: jstack [ option ] pid jstack [ option ] executable core jstack [ option ] [server-id@]remote-hostname-or-IP

常用参数说明

1)options:

executable Java executable from which the core dump was produced.(可能是产生core dump的java可执行程序)

core 将被打印信息的core dump文件

remote-hostname-or-IP 远程debug服务的主机名或ip

server-id 唯一id,假如一台主机上多个远程debug服务

2)基本参数:

-F当’jstack [-l] pid’没有相应的时候强制打印栈信息

-l长列表. 打印关于锁的附加信息,例如属于java.util.concurrent的ownable synchronizers列表.

-m打印java和native c/c++框架的所有栈信息.

-h | -help打印帮助信息

pid 需要被打印配置信息的java进程id,可以用jps查询。

【本文转自爪哇笔记 作者:小柒2012 原文链接:https://mp.weixin.qq.com/s/LdoOk8zQXVn7IHB6WI0EiQ】

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯