美文网首页
jvm相关生产问题总结

jvm相关生产问题总结

作者: sunsetJose | 来源:发表于2020-02-13 20:17 被阅读0次

一 、使用jdk自带工具可以进行问题定位

先通过 ps -ef|grep java(或者使用jps命令) 找到对应的java相关进程,确定其进程id

jstat 查看堆内存各部分的使用量

命令:jstat -gc pid

S0  — Heap上的 Survivor space 0 区已使用空间的百分比 

S0C:S0当前容量的大小 

S0U:S0已经使用的大小 

S1  — Heap上的 Survivor space 1 区已使用空间的百分比 

S1C:S1当前容量的大小 

S1U:S1已经使用的大小 

E   — Heap上的 Eden space 区已使用空间的百分比 

EC:Eden space当前容量的大小 

EU:Eden space已经使用的大小 

O   — Heap上的 Old space 区已使用空间的百分比 

OC:Old space当前容量的大小 

OU:Old space已经使用的大小 

P   — Perm space 区已使用空间的百分比 

OC:Perm space当前容量的大小 

OU:Perm space已经使用的大小 

YGC — 从应用程序启动到采样时发生 Young GC 的次数 

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒) 

FGC — 从应用程序启动到采样时发生 Full GC 的次数 

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒) 

GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒),它的值等于YGC+FGC 

命令 : jstat -gcutil pid 1000 (每隔1s打印gc情况,能够打印出百分比,gc情况更加清晰)

S0:幸存1区当前使用比例

S1:幸存2区当前使用比例

E:伊甸园区使用比例

O:老年代使用比例

M:元数据区使用比例

CCS:压缩使用比例

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

重点观察老年代垃圾回收的频次和耗时

如果full gc情况比较严重,则需要查看jvm内存使用情况

jmap

命令:jmap -histo pid 展示class的内存情况

说明:instances(实例数)、bytes(大小)、classs name(类名)。它基本是按照使用使用大小逆序排列的。

命令:jmap -histo:live pid>jmap-pid.log

可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。 可以将其保存到文本中去,在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。

jmap -histo:live 这个命令执行,JVM会先触发gc,然后再统计信息。

命令:jmap -dump:live,format=b,file=a.log pid

说明:内存信息dump到a.log文件中。这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用。

查看对象数最多的对象,并按降序排序输出:

执行:jmap -histo <pid>|grep alibaba|sort -k 2 -g -r|less

查看占用内存最多的最象,并按降序排序输出:

执行:jmap -histo <pid>|grep alibaba|sort -k 3 -g -r|less

在cpu使用率较高的情况下,可能需要查看线程使用情况

jstack -l pid  查看对应进程号的线程使用情况

-l 输出锁的附加信息

jstack pid >> jstack.log  导出成文件

需要多次采集观察线程状态

死锁,Deadlock(重点关注) 

等待资源,Waiting on condition(重点关注) 

•  等待获取监视器,Waiting on monitor entry(重点关注) 

阻塞,Blocked(重点关注) 

•  执行中,Runnable 

•  暂停,Suspended 

•  对象等待中,Object.wait() 或 TIMED_WAITING 

•  停止,Parked 

二、使用阿里arthas工具进行更加准确的问题分析

可直接使用java -jar arthas-boot.jar的方式进行启动

启动完成后可以选择对应的java 进程进行排查问题

命令简单介绍

dashboard 当前系统的实时数据面板

thread 查看当前 JVM 的线程堆栈信息

watch 方法执行数据观测

trace 方法内部调用路径,并输出方法路径上的每个节点上耗时

stack 输出当前方法被调用的调用路径

tt 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

monitor 方法执行监控

jvm 查看当前 JVM 信息

vmoption 查看,更新 JVM 诊断相关的参数

sc 查看 JVM 已加载的类信息

sm 查看已加载类的方法信息

jad 反编译指定已加载类的源码

classloader 查看 classloader 的继承树,urls,类加载信息

heapdump 类似 jmap 命令的 heap dump 功能

注意:需要使用 shutdown命令 退出 Arthas。 (自动重置所有增强过的类)

使用 dashboard 命令可以概览程序的 线程、内存、GC、运行环境信息

thread -n [显示的线程个数],就可以排列出 CPU 使用率 Top N 的线程

使用 thread | grep pool 命令查看线程池里线程信息

thread -b 命令查看直接定位到死锁信息

如果怀疑不是自己的代码,可以使用 jad 命令直接反编译 class

使用  sc -d -f  ** 命令查看类的字段信息

相关文章

  • jvm相关生产问题总结

    一 、使用jdk自带工具可以进行问题定位 先通过 ps -ef|grep java(或者使用jps命令) 找到对应...

  • JVM相关总结

    [JVM] 虽然大部分情况下不需要我们直接对Java内存方面进行直接操作,但是了解其中的原理和调优还是比较重要的,...

  • Android职场

    根据本人多次的面试经历,总结以下几个面试实战问题,分享给大家。 ----Java相关---- JVM内存模型 1、...

  • Android晋级超级攻略,全面攻破技术疑难

    第1章 JVM——语法和内存类 本章主要讲解JVM的相关考点,并掌握JVM内存模型及JMM,JVM相关问题的真实意...

  • Java GC

    摘要 总结了下jvm 的通用的gc算法以及概念。主要记录思路为 问题定义回收哪些对象如何回收相关阅读自带问题 GC...

  • JVM相关知识总结

    标签: JVM 前言:JVM相关知识也是面试过程中常问的一点,学习JVM知识有助于了解Java底层实现原理,在开发...

  • JVM内存相关总结

    JVM大体结构图 运行时数据区 线程隔离数据区程序计算器当前线程执行字节码的行号指示器如分支、循环、跳转、异常处理...

  • 【BAT面试题系列】Java面试必考题JVM的最完整详解,深度解

    JVM是BAT面试中的Java必考题目。 想要完美解答JVM相关的面试问题,至少需要掌握JVM的内存管理、JVM垃...

  • jvm性能分析命令总结

    Jvm性能分析命令总结 jps -l 列出java相关的进程 图例: jmap -histo pid**** | ...

  • Jvm堆内存和GC简介

    最近经常遇到jvm内存问题,觉得还是有必要整理下jvm内存的相关逻辑,这里只描述jvm堆内存,对外内存暂不阐述。 ...

网友评论

      本文标题:jvm相关生产问题总结

      本文链接:https://www.haomeiwen.com/subject/pjnlfhtx.html