Java处事器内存过高CPU过高题目校阅
1、内存过高一样平常有两种环境:内存溢出和内存走漏 (1)内存溢出:措施分派的内存超出物理机的内存巨细,导致无法继承分派内存,呈现OOM报错 (2)内存走漏:不再行使的工具一向占有着内存不开释,导致这块内存挥霍掉,久而久之,内存走漏的工具会萃起来,也会导致物理机的内存被耗尽,呈现OOM报错 2、内存过高的检测步伐:凡是我们的Java处事器陈设在Linux呆板上面,可以通过jvm自带的呼吁举办一些检测 (1)查察工具的数量和占用内存巨细 ①参数为Java措施的历程号,将功效导出到指定目次中, jmap -histo:live <历程号> > <导出目次+文件名> ②示譬喻下,可以看到措施中各个工具所占用内存的环境,按照占用字节数巨细降序表现,这里只能看出哪些工具占用内存高,可是还不能详细定位到题目代码,必要进一步排查 ③一些非凡的标识的寄义 [C 暗示char[],一样平常与String工具相干,由于String着实就是基于char数组实现的 [S 暗示short[] [I 暗示int[] [B 暗示byte[] [II 暗示int[][] num #instances #bytes class name ---------------------------------------------- 1: 585152 75635896 [C 2: 66541 71446496 [B 3: 1141734 36535488 java.util.HashMap$Entry 4: 176622 26086840 <constMethodKlass> 5: 176622 24034208 <methodKlass> 6: 17717 19584560 <constantPoolKlass> 7: 174454 18375128 [Ljava.util.HashMap$Entry; 8: 571222 13709328 java.lang.String 9: 832783 13324528 java.lang.Integer 10: 17717 13198840 <instanceKlassKlass> 11: 15092 11237440 <constantPoolCacheKlass> 12: 46779 10429728 [I 13: 191501 7660040 java.util.LinkedHashMap$Entry 14: 12599 6567592 <methodDataKlass> 15: 113526 6357456 java.util.HashMap 16: 197998 6335936 java.util.Hashtable$Entry (2)假如必要进一步定位题目代码,那么就必要把Java措施的内存镜像导出,再详细说明白,通过如下呼吁导出措施的内存镜像 jmap -dump:format=b,file=<导出目次+文件名> <历程号> (3)下载Memory Analyzer器材来说明内存镜像
(4)打开软件后,File-->Open Heap Dump...,打开适才导出的镜像文件,选择Leak Suspects Report,Finish,进入说明页面 Histogram:列表展示出内存中的工具数量和占用内存巨细 Dominator Tree:列表展示出措施中每个线程中的工具数量和占用内存巨细 Top Consumers:图表展示出每个线程的工具数量和占用内存巨细 Top Components:图表展示出内存中的工具数量和占用内存巨细 Leak Suspects:这个是最常用的,会自动检测说明内存非常的缘故起因 右键工具-->show objects by class可以查察工具的详细环境 by incomming reference:表现引用该工具/线程的其他工具 by outgoing reference:表现当前工具/线程引用的其他工具 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |