首页 > 编程知识 正文

oom文件打不开,oom如何排查

时间:2023-05-04 05:33:08 阅读:56727 作者:531

1、jdk有基础工具

2、MAT分析杜姆

3、虚拟机实时监控

4、遇到过OOM

内存溢出有哪些1、Java堆溢出? (Java.lang.out of memory error 3360 javaheapspace ) )。

2、PermGen space

3、堆栈溢出错误(虚拟机无法提供足够的内存空间扩展堆栈) )。

4、直接崩溃

内存溢出和泄漏内存溢出内存溢出:

是指程序申请内存时,没有足够的内存空间来使用,从而产生内存输出;

内存泄漏内存leak,

指程序申请内存后,无法释放申请的内存空间。 内存泄漏的危害是可以忽略的,但是内存泄漏的堆积结果很严重,无论有多少内存,迟早都会被夺走光

一、jdk自带基础工具

1、jps (javavirtualmachineprocessstatustool )。

实际上,这是最常用的命令。 下面介绍的许多小工具都是在使用jps查找当前有哪些Java进程并获取该Java进程的id后进行处理的。 jps [options] [hostid]

-q不输出类名、Jar名或传递的main方法的参数

输出传递给main方法的参数

-l输出main类或Jar的完全限制名称

-v输出传递给JVM的参数[ root @ izbp 11 B3 erz reb 4x i5 utv ZZ/] # jps-ml

2611/usr/lib/Jenkins/Jenkins.war-- log file=/var/log/Jenkins.log-- webroot=/var/cache/cache/war 740 org.Apache.catalina.startup.bootstrapstart 19942 org.Apache.zookeeper.server.quorum.quorumpeermain/mnt zoo.CFG 20537 sun.tools.jps.jps-ml 11309 org.sonatype.nexus.bootstrap.jsw.jsw launcher./conf/jetty.xmml

2、jstack

jstack主要用于显示Java进程中的线程堆栈信息。 语法如下:

jstack [option] pid

jstack [ option ]可执行核心

JTA CK [ option ] [服务器- id @ ] remote-hostname-or-IP

PID : Java APP应用程序的进程号。 通常可以通过jps取得;

executable:是coredump的java可执行程序$JAVA_HOME/xsdtk/java;

用core:打印的core文件(从jvm崩溃生成的core文件、hs _ err _ PID log文件中查看)

emote-hostname-or-ip:远程调试服务器的名称或IP

服务器- id :的唯一id。 如果一台主机上有多个远程调试服务; 选项的说明如下。

-l,打印多余的锁定信息。 发生死锁时,可以通过jstack -l pid观察锁定的保持情况

-m不仅输出Java堆栈信息,还输出C/C堆栈信息。 例如,朴素方法

jstack -l pid

查看耗时的线程

顶级惠普PID

printf '%xn' 21226

十六进制数字,获取需要时间的线程id

52ec

获取需要时间的信息

[ root @2logs ] # jstack 21222|grep 52e c

' gctaskthread #3(parallel GC (OS _ prio=0tid=0x 00007 fee 24027000 NID=0x 52 EC runnable

3、jmap (内存映射) jmap导出堆内存,使用jhat进行分析

jmap [选项] PID

jmap [选项]可执行核心

jmap [ option ] [服务器- id @ ] remote-hostname-or-IP

参数如下: - heap :打印JVM heap时

- histo :打印JVM heap的直方图。 其输出信息包括类名、对象数和对象的占用大小。

-histo:live

:同上,但是只打印存活对象的情况

-permstat:打印permanent generation heap情况(持久代)

输出 类加载器名称、对象是否存活、对象地址、父类加载器、已加载的类大小等信息

-dump:    打印 dump(内存使用) 日志文件

jmap -heap pid

查看进程堆内存使用情况:包括使用的GC算法、堆配置参数和各代中堆内存使用:

[root@iZbp11b3erzreb4xi5utvzZ ~]# jmap -heap 32326

Attaching to process ID 32326, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 25.161-b12

using thread-local object allocation.

Parallel GC with 4 thread(s)

Heap Configuration:

MinHeapFreeRatio        = 0

MaxHeapFreeRatio        = 100

MaxHeapSize              = 536870912 (512.0MB)

NewSize                  = 201326592 (192.0MB)

MaxNewSize              = 201326592 (192.0MB)

OldSize                  = 335544320 (320.0MB)

NewRatio                = 2

SurvivorRatio            = 8

MetaspaceSize            = 21807104 (20.796875MB)

CompressedClassSpaceSize = 1073741824 (1024.0MB)

MaxMetaspaceSize        = 17592186044415 MB

G1HeapRegionSize        = 0 (0.0MB)

Heap Usage:

PS Young Generation

Eden Space:

capacity = 121634816 (116.0MB)

used    = 105409240 (100.52608489990234MB)

free    = 16225576 (15.473915100097656MB)

86.6604180171572% used

From Space:

capacity = 38797312 (37.0MB)

used    = 6225208 (5.936820983886719MB)

free    = 32572104 (31.06317901611328MB)

16.045462118612754% used

To Space:

capacity = 39845888 (38.0MB)

used    = 0 (0.0MB)

free    = 39845888 (38.0MB)

0.0% used

PS Old Generation

capacity = 335544320 (320.0MB)

used    = 19401584 (18.502792358398438MB)

free    = 316142736 (301.49720764160156MB)

5.782122611999512% used

19968 interned Strings occupying 2526840 bytes.

jmap -histo[:live] pid

查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象

[root@iZbp11b3erzreb4xi5utvzZ ~]# jmap -histo 32326

num    #instances        #bytes  class name

----------------------------------------------

1:        351157      49044840  [C

2:        140145      26768472  [B

3:        30637      18927560  [I

4:        191987        4607688  java.lang.String

5:        46693        3523560  [Ljava.lang.Object;

6:        27813        2447544  java.lang.reflect.Method

7:        30591        2447048  [S

8:        58522        2340880  java.util.TreeMap$Entry

9:        81040        1683096  [Ljava.lang.Class;

10:        38542        1541680  java.util.HashMap$KeyIterator

11:        44546        1069104  java.lang.StringBuilder

12:        18696        1046976  java.util.concurrent.ConcurrentHashMap$KeyIterator

13:        37638        903312  java.util.Collections$UnmodifiableCollection$1

14:        10197        896216  [Ljava.util.HashMap$Node;

15:          7902        879416  java.lang.Class

class name是对象类型,说明如下:B byte

C char

D double

F float

I int

J long

Z boolean

[ 数组,如[I表示int[]

[L+类名 其他对象

jmap -dump:format=b,file=dumpFileName pid[root@iZbp11b3erzreb4xi5utvzZ ~]# jmap -dump:format=b,file=/mnt/d.bat 32326

Dumping heap to /mnt/d.bat ...

Heap dump file created

问题:

这些工具真靠谱吗?

大应用异常下 直接使用jmap jstack 根本无法加载内存信息或者耗时很久?

有什么可以替代吗?

gcore?

二、MAT 分析Dump

Dump 是什么Dump是反应Java堆使用情况的内存镜像,其中主要包括系统信息、虚拟机属性、完整的线程Dump、所有类和对象的状态等。 一般,在内存不足、GC异常等情况下,我们就会怀疑有内存泄漏。这个时候我们就可以制作堆Dump来查看具体情况。分析原因。

Dump 文件的分析有多种方式1、命令jhat 分析(麻烦)

2、VisualVM 工具分析

3、MAT 分析

MAT分析

J2SE中提供了一个简单的命令行工具来对java程序的cpu和heap进行 profiling(剖析面),叫做HPROF

Shallow Size

对象自身占用的内存大小,不包括它引用的对象。

针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。

针对数组类型的对象,它的大小是数组元素对象的大小总和。

Retained Size

Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)

换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。

不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。

List objects --> with outgoing references

:查看当前对象持有的外部对象引用(在对象关系图中为从当前对象指向外的箭头)

List objects --> with incoming references

:查看当前对象被哪些外部对象所引用(在对象关系图中为指向当前对象的箭头)

三、VM 实时监控

四、遇到过OOM

1、刚开始用eclipse 开发 ,没事就本地OOM

2、DateForm oom

3、POI 导出xls 包含图片

4、万恶的死循环

5、hashmap

6、websocket 大内存长久占用

事故:

1、遇到fullgc 了,oom了?完蛋

2、抓不出来dump ?完蛋

3、jmap、jstack 都用不了?完蛋

1、记录时间点

2、抓住一切日志可用日志(应用日志)

3、慢慢分析

参考

GC:https://www.cnblogs.com/wozixiaoyao/p/5658950.html

jstack:https://www.jianshu.com/p/08b816d9b34f

executable core:https://lydawen.iteye.com/blog/2215300

内存划分:https://www.cnblogs.com/haitaofeiyang/p/8392268.html

mat:http://www.cnblogs.com/trust-freedom/p/6744948.html#histogram

oom:https://mp.weixin.qq.com/s/kJe8WScwB4XcqRNE2vM7EA?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。