前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM-GC3--定位线上OOM问题的方法

JVM-GC3--定位线上OOM问题的方法

作者头像
用户7798898
发布2022-05-09 16:28:47
1.2K0
发布2022-05-09 16:28:47
举报
文章被收录于专栏:盛开在夏天的太阳

第二节jvm公开课课, 主要介绍了一个知识点. 那就是线上发生OOM, 如何定位

  1. top命令, 线上查看cpu和内存的使用情况
  2. jstack 进程号

  查看当前进程有哪些线程

  初步定为排查线程的健康状况, 如果有很多线程处于等待状态,那么可能就有问题了

  1. jstat -gc 线程号: GC回收的情况
  2. jinfo 3271 

  显示进程中的常用信息

  1. jmap

  jmap -dump:format=b, file=20200208.dump 3806

  这个命令可以吧内存拷贝到文件, 然后分析文件. 

  注意: jmap不能用于生产环境, 会让生产环境卡死的.

  问题: 拷贝到文件内容怎么看呢? 使用java自带的jvisualvm.java . 这个文件在jdk1.8/bin/目录下.

  1). 在windows下双击打开jvisualvm. 然后点击文件/装入, 设置文件类型为 堆 Dump(*.hprof, *....)

  2). 选择文件后打开, 显示堆文件的概要信息

  3). 查看类模块

   可以看到哪些类创建的实例数特别大. 占用了多少内存/cpu

  4). OQL控制台: 可以输入类似于sql一样的语句: 例如输入select * from java.lang.String s, 就会执行语句,显示出所有的创建java.lang.String对象的类.

内存小的话, 可以使用jmap, 但是大的话坚决不能使用.

  jmap 可不可以把一部分日志打印到堆文件呢?  

  jmap -histr 3806 | head 10000 > 1.txt    把10000行数据打印到文件进行分析.

  1. arthas 在线排查工具

  这是今天讲的重点. 通过这个工具可以做什么

  • dashboard: 仪表盘, 显示观察堆的使用
  • jvm
  • thread / thread 进程号
  • sc(search class的简称)
  • watch
  • heapdump: 产生一个对存储文件
  • jad: java反编译工具
  • redefine 路径 在线修改代码
    • 修改源文件
    • javac编译
    • 执行defeine在线修改代码
  1. 很重要的一个方面, 加日志.

常见的GC问题

 1. java启动时如何设置jvm的日志

  java -Xloggc:/root/1.txt 

  这个命令是把jvm日志打印到/root/1.txt文件下.

  但切记生成环境不可使用,原因是, 内容特别多, 有吧硬盘打满的危险

  使用滚动生成日志的方式:

代码语言:javascript
复制
java -Xloggc:/root/logs/gc.log -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=100 -XX:GCLogFileSize=100k

  参数含义:

  • -Xloggc: 输入jvm日志的文件路径
  • -XX:+PrintGCDetails 打印gc的详细日志信息
  • -XX:UseGCLogFileRatation 滚动打印日志
  • -XX:NumberOfGCLogFiles gc日志文件个数
  • -XX:GCLogFileSize gc日志每个文件的大小    

问题 : 滚动生成日志也存在一定的问题, 有可能你要查看的日志已经被删除了. 所以设置好文件大小和文件个数关键

参考文章: https://blog.csdn.net/qq_35440040/article/details/101026766

  1. 内存不超过10%, 但是频繁发生FGC是什么原因?如何排查?

第一步: 查看启动参数. -Xmx 128M -Xms 128M  

  使用命令查看启动参数:jps -m -l -v

第二步: 问题还是没有解决, 使用执行命令:jamp -histro 进程, 查看堆信息

第三步: 使用 jstat -gccause 26003 1000查看gc的情况

第四步: dump堆内存分析。看看哪些类实例最多, 这样内存和cpu居高不下.


扩展阅读

整理这个文件的时候, 想起之前同事整理的一篇在spring cloud环境下,如何通过spring boot actuator来定位线上问题.

1. 监控和管理生产环境spring boot actuatorhttps://www.cnblogs.com/ITPower/articles/12286106.html

2. 通过spring boot actuator导出dump分析https://cloud.tencent.com/developer/article/1997412

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常见的GC问题
    • 扩展阅读
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档