目录

一、通过windows版JDK自带的图形化工具

1.工具jvisualvm.exe

1.1.1启动脚本配置

1.1.2Jvisualvm.exe 工具配置

1.1.3在服务器上生产堆的dump文件

1.1.4执行GC操作

1.2工具jconsole.exe

1.2.1启动脚本配置 同1.1.1

1.2.2 启动jconsole.exe

1.2.3查看概览,内存,线程,类,jvm概要

1.2.4执行GC

1.3 线程dump分析工具-针对栈

1.3.1使用说明

1.4 Heap dump分析工具-针对堆

1.4.1 获取heap的转储快照dump文件

1.4.2导出到windows

1.4.3通过mat 工具分析heap

1.5 jvm常见命令用法

jmap -heap pid

jstack -l pid

二,如何排查JVM问题


一、通过windows版JDK自带的图形化工具

1.工具jvisualvm.exe

1.1.1启动脚本配置

tp-provider的start.sh:

pid=`ps -ef|grep task-platform-provider-*.jar|grep -v "grep"|awk '{print $2}'`

if [ "$pid" = "" ] ; then

echo "provider is starting"

nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9180  -Xmx2g -Xms2g -Xmn256m -XX:MetaspaceSize=128m  '-Djava.rmi.server.hostname=10.106.1.83'  '-Dcom.sun.management.jmxremote.port=8877'  '-Dcom.sun.management.jmxremote.rmi.port=8877'   '-Dcom.sun.management.jmxremote.ssl=false' '-Dcom.sun.management.jmxremote.authenticate=false'  -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=/home/dumpDir/providerDump.hprof  -javaagent:"/home/skywalking-agent/skywalking-agent-provider/skywalking-agent.jar" -jar task-platform-provider-*.jar --spring.config.location=config/application.yml > /dev/null 2>&1 &

else

echo "provider has already been started->$pid"

fi

其中 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9180

为远程调试参数,简介如下:

jdwp:通知JVM使用(java debug wire protocol)来运行调试环境。

  1. session(transport):指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另外dt_shmem指用共享内存方式,其中dt_shmem只适用于窗口平台。
  2. server:指是否支持在服务器模式的虚拟机中。
  3. suspend:指明是否在调试客户端(本地)建立起来后,再执行JVM。
  4. address:用户自定义的,为debug端口号,不能被占用。

IDEA中远程调试需要增加启动配置,配置如下:

另外,

-Xmx2g -Xms2g -Xmn256m -XX:MetaspaceSize=128m

'-Djava.rmi.server.hostname=10.106.1.83'  '-Dcom.sun.management.jmxremote.port=8877'

'-Dcom.sun.management.jmxremote.rmi.port=8877'

'-Dcom.sun.management.jmxremote.ssl=false'

'-Dcom.sun.management.jmxremote.authenticate=false'

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/home/dumpDir/providerDump.hprof

这些与JVM相关:

  1. -Xms 设置堆的最小空间大小。
  2. -Xmx 设置堆的最大空间大小。
  3. -Xmn:young generation(年轻代)的heap大小。一般为Xmx的 3、4 分之一。
  4. -XX:MetaspaceSize设置元数据区最小空间(元数据区:在JDK8中持久代(Permanent Generation)部分数据移到了元数据区(Metaspace),在JDK8中已经没有持久代。)。
  5. '-Djava.rmi.server.hostname=${ip_address}' 远程JVM运行的主机地址。
  6. '-Dcom.sun.management.jmxremote.port=${port}'

'-Dcom.sun.management.jmxremote.rmi.port=${port}'

解释如下:com.sun.management.jmxremote.port 指定端口后,除了在这个端口上会创建一个 RMI 连接器之外,还会额外创建另一个连接器,而这个额外创建的连接器的端口,就可以通过 com.sun.management.jmxremote.rmi.port 参数来指定。

当存在防火墙等网络访问限制时,可通过 com.sun.management.jmxremote.rmi.port 参数指定 RMI 连接器所使用的端口并进行开放。在这种场景下,必须设置此参数。

另外,com.sun.management.jmxremote.rmi.port 使用的端口,可以与 com.sun.management.jmxremote.port 指定的端口相同,这样仅开放一个端口就可以了。

  1. '-Dcom.sun.management.jmxremote.ssl=false'

默认值为true,这将启用客户端与JMX代理之间的安全套接字层(SSL)通信。将值设置为false以禁用SSL。

  1. '-Dcom.sun.management.jmxremote.authenticate=false'

默认值为true,启用使用用户名和密码的身份验证。将设置为false,表示不需要用户名和密码验证。

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=/home/dumpDir/providerDump.hprof

在发生OOM(内存溢出)时,会在指定路径下生成堆dump文件

另外,

-javaagent:"/home/skywalking-agent/skywalking-agent-web/skywalking-agent.jar"

此参数表示skywalking相关,skywalking是分布式系统的应用程序性能监视工具,是非侵入式的。

最后,

--spring.config.location=config/application.yml

配置文件路径。

1.1.2Jvisualvm.exe 工具配置

工具路劲:C:\Program Files\Java\jdk1.8.0_91\bin

配置要查看服务对应的IP

添加连接JMX

查看概述,监听,线程,抽样器

1.1.3在服务器上生产堆的dump文件

1.1.4执行GC操作

1.2工具jconsole.exe

1.2.1启动脚本配置 同1.1.1

1.2.2 启动jconsole.exe

工具路径:C:\Program Files\Java\jdk1.8.0_91\bin

配置要查看的服务对应的IP

1.2.3查看概览,内存,线程,类,jvm概要

1.2.4执行GC

1.3 线程dump分析工具-针对栈

1.3.1使用说明

Step1. 导入栈dump 文件

命令: jps -l

查看 main 类或 Jar 的对应的进程

命令: jstack PID>>  路径/dump名称.tdump

生成栈tdump到指定路径

Step2. 分析栈dump 文件

从服务器获取 .tdump 到 Windows,通过jca工具分析

1.4 Heap dump分析工具-针对堆

1.4.1 获取heap的转储快照dump文件

方法一,命令生成

jmap - dump:format=b,file=路径/命名.phrof  pid

jmap -dump:format=b,file=/home/dump2.phrof 1991

方法二,jvisualVM工具生成

1.4.2导出到windows

1.4.3通过mat 工具分析heap

Step1:导入heapdump.phrof 到 mat

Step2:分析heapdump.phrof

1.5 jvm常见命令用法

jps [options] [hostid] (hostid 为 ip 或域名地址)

jps 是用于查看有权访问的 hotspot 虚拟机的进程,当未指定 hostid 时,默认查看本机 jvm 进程。

常用命令:jps –l

输出进程号和对应的 main 类或 jar 的全限名,如下图所示。

jmap -heap pid

用于打印指定 Java 进程的堆内存细节。

jmap -heap pid > 目录/jmap_heap.dump

输出进程的堆内存信息到指定目录下的文件jmap_heap.dump中,这样可以把jmap_heap.dump拿到windows上看

  1. MaxHeapFreeRatio:最大空闲堆内存比例

最大空闲对内存比例,GC 后如果发现空闲堆内存大于整个预估堆内存的 N%(百分比),JVM 则会收缩堆内存,但不能小于-Xms 指定的最小堆的限制。

  1. MinHeapFreeRatio: 最小空闲堆内存比例

GC 后如果发现空闲堆内存小于整个预估堆内存的 N%(百分比), 则 JVM 会增大堆内存,但不能超过-Xmx 指定的最大堆内存限制。

  1. MaxHeapSize: 即-Xmx, 堆内存大小的上限
  2. InitialHeapSize: 即-Xms, 堆内存大小的初始值
  3. NewSize:新生代预估堆内存占用的默认值
  4. MaxNewSize: 新生代占整个堆内存的最大值
  5. OldSize: 老年代的默认大小,
  6. NewRatio:

老年代对比新生代的空间大小, 比如 2 代表老年代空间是新生代的两倍大小.

  1. SurvivorRatio:

Eden/Survivor 的值. 例如 8 表示 Survivor:Eden=1:8, 因为 survivor 区

有 2 个, 所以 Eden 的占比为 8/10.

  1. MetaspaceSize:

分配给类元数据空间的初始大小(Oracle 逻辑存储上的初始高水位, the initial high-water-mark ). 此值为估计值. MetaspaceSize 设置得过大会延长垃圾回收时间. 垃圾回收过后, 引起下一次垃圾回收的类元数据空间的大小可能会变大

  1. MaxMetaspaceSize:

是分配给类元数据空间的最大值, 超过此值就会触发 Full GC. 此值仅受限于系统内存的大小, JVM 会动态地改变此值

  1. CompressedClassSpaceSize:

类指针压缩空间大小, 默认为 1G.

  1. G1HeapRegionSize:

G1 区块的大小, 取值为 1M 至 32M. 其取值是要根据最小Heap 大小划分出 2048

个区块.

说明:jmap 在系统调优时通常会结合 jhat 来分析 jmap 生成的 dump 文件。

内存泄露 :  对象不使用了还占用着内存,是导致内存溢出的一个原因。内存泄露不等于内存溢出。

jstack -l pid

用于打印指定 Java 进程当前时刻的线程快照。-l表示除堆栈外,显示关于锁的附加信息。

jstack -l pid > 目录/jstack.tdump

输出进程的线程情况到目录下的jstack. tdump文件中。

二,如何排查JVM问题

基础准备:

jps -l 查看各个应用程序或者jar包的进程

Jps -v 查看各个应用程序或jar 包的 jvm 参数配置

以上两步截图备用

  1. 可以使⽤jmap或者  jstat命令来查看jvm堆中各个区域的参数配置和使用情况 ,如果有使用率过高,占满,可以先考虑参数调优。当然也可以用jvm自带的jvisualVM,Jconsole来进行可视化的分析,主要也是参数配置可使用情况,附带一些CPU,线程运行等信息。

  2. 可以通过jstack生栈的dump文件,来查看栈中的运⾏情况                                                  1>jstack PID>>  路径/dump名称.tdump                                                                                    2>  .tdump文件copy到windows上,通过jca 工具来分析,栈信息,主要是死锁,是否要线程挂起,是否有阻塞等。
  3. 可以通过jmap 生产对的dump文件,你用cat 工具分析堆中具体出问题的地方,找到对应服务中哪一行代码具体处理

    jmap - dump:format=b,file=路径/命名.phrof  pid

    jmap -dump:format=b,file=/home/dump2.phrof 1991

  4. 一般在服务的启动文件中会配置内存溢出时堆的dump文件保存位置,找到这个文件也可以按3的方法直接分析

总之,调优不是⼀蹴⽽就的,需要分析、推理、实践、总结、再分析,最终定位到具体的问题

JVM 堆栈分析讲解相关推荐

  1. jvm线程分析命令_JVM:如何分析线程转储

    jvm线程分析命令 本文将教您如何分析JVM线程转储,并查明问题的根本原因. 以我的观点,线程转储分析是掌握Java EE生产支持的任何个人最重要的技能. 您可以从线程转储快照中获取的信息量通常远远超 ...

  2. jstack 工具 查看JVM堆栈信息

    1|0介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&q ...

  3. 全网最硬核 JVM TLAB 分析(额外加菜) 8. 通过 JFR 监控 TLAB

    今天,又是干货满满的一天.这是全网最硬核 JVM 系列的开篇,首先从 TLAB 开始.由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核 JVM TLAB 分析(单篇版不包含额外 ...

  4. JVM虚拟机学习 - JVM类加载,JVM内存模型,JVM性能分析工具

    JVM虚拟机 二 JVM类加载 类的生命周期 加载: ​ 加载class文件到二进制字节流,然后再将二进制字节流转化为方法区的运行时数据结构,生成一个对应的Class对象作为类各种数据的访问入口. 链 ...

  5. java堆栈分析工具_JVM内存分析工具使用

    Java 内存堆栈分析.我们在分析现网问题时候,经常会遇到一些问题从日志上无法分析的疑难问题.在我们举足无措的时候,我们可以分析一些JVM内存,来看看问题出在哪里了. 我们经常用到的一工具: 分析栈内 ...

  6. linux分析jstack,jstack命令以及线程转储堆栈分析

    一.命令介绍 jstack是jdk自带的jvm分析工具,用于打印指定 java进程,core文件 或者远程 调试服务 的java线程栈信息,从而分析java程序性能不佳或者崩溃的问题.另外该命令是实验 ...

  7. JVM指令分析实例四(数组、switch)

    本篇为<JVM指令分析实例>的第四篇,相关实例均使用Oracle JDK 1.8编译,并使用javap生成字节码指令清单. 前几篇传送门: JVM指令分析实例一(常量.局部变量.for循环 ...

  8. jvm crash分析工具

    为什么80%的码农都做不了架构师?>>>    介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log.里面记录了jvm当时的运行状态以及错 ...

  9. JVM 逃逸分析 (史上最全)

    对于JVM"逃逸分析" 特性,也是近年来大厂面试.高薪面试的常见面试题. 和逃逸分析有关的常见面试题: Java中的对象一定是在堆上分配的吗? 注:本文以 PDF 持续更新,最新尼 ...

最新文章

  1. js如何实现扫描身份证识别_人脸识别是如何实现的
  2. javaList容器中容易忽略的知识点
  3. cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp” 和 cl: 命令行 error D8021 :无效的数值参数“/Wno-unused-function”
  4. centos安装g++
  5. ITK:预定义操作以对应两个图像中的像素
  6. Ng第十二课:支持向量机(Support Vector Machines)(一)
  7. [转载]当代中国建筑设计百家名院名单
  8. 学习设计模式 - 六大基本原则之接口隔离原则
  9. Direct3D 开发之旅 3D 游戏基本概念的介绍2
  10. Linux下c开发 之 线程通信与pthread_cond_wait()的使用
  11. java swing简介
  12. 【操作系统/OS笔记19】数据块缓存
  13. 通过第三方平台超级鹰进行登录页面验证码识别
  14. 关闭windows电脑 ctrl +alt +方向键旋转屏幕快捷键
  15. 关于对象中的this指向和修改this指向问题。
  16. 0x00F749F6 处(位于 基于多态实现职工管理系统.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000004 时发生访问冲突。
  17. 如何将微商相册上的所有图片和小视频快速下载和保存
  18. linux安装glib,glib源码安装使用方法
  19. 怎么恢复删除的微信聊天记录?手残党终于有救了
  20. 有了这几个webp转换工具,快速完成图片转换工作

热门文章

  1. 如何理解目标价值?学会这招即可快速设定并达到目标
  2. Vue学习-基础篇7
  3. 内蒙古森林火线运兵直升机坠毁14人伤
  4. 计算机在化学中的应用视频教学,计算机多媒体在中学化学中的应用
  5. Activity的初级,中级,高级问法,android开发艺术探索电子
  6. 买了小区一楼是一种怎样的感受?
  7. 九款mac必装软件大放送~~
  8. Github | 个人资料自述文件配置的不完全总结
  9. chrome84版本解决加载flash插件问题
  10. java:获取字符串中某个字符串第一次出现的位置(索引)