内存溢出咋解决?JVM内存设置门道多,生产环境要注意

检测维修 0 97

曾经讲过了关于full gc的解决办法,此次来讲讲,大家经常会碰到的内存溢出状况 。

(一)JVM 内存溢出

或多或少会遇到内存溢出,也就是OOM的情形,然而致使OOM的缘由却是各种各样的,一起来剖析一下。

请你明确一下具体需求,从你提供的内容格式来看,似乎不完整,不太清楚要对这部分进行怎样的改写。比如是要补充完整后改写,还是对这几个参数相关的表述进行改写等 。请补充完整。

堆内存不足时生成堆转储文件,指定堆转储文件路径为D:\ ,其中 -XX:HeapDumpPath=D:\ ,用于该目标限定堆内存异常情况时向指定目录生成对应。

解析代码OOM内存快照自动保存

import java.util.ArrayList;
// 资源占用过多或者资源未释放,内存溢出
两个斜杠,连字符 Xmx512m,连字符 server,连字符 verbose冒号gc,连字符XX冒号正号PrintGCDetails,连字符XX冒号正号HeapDumpOnOutOfMemoryError,连字符XX冒号HeapDumpPath等于D盘符冒号反斜杠 。
公共类,“OutOfMemoryDemo1”这个类 。
 static ArrayList space = new ArrayList();
公共的静态的无效的_main_方法,以字符串双字数组_参数_作为接收,抛出异常_进行处理操作,其代码块如下:
 // 内存泄漏 最终会导致 内存溢出
 for (int i = 0; i < 1000; i++) {
 space.add(new byte[1024 * 1024 * 64]); // 64兆
 Thread.sleep(3000L);
 }
 }
}

内存溢出OOM排查工具_JVM内存溢出解决方案_内存溢出检测工具

存在一个问题,即为很多人于生产环境配置处会有的,配置之中诸如Xmx以及Xms相关的配置,若服务器本身就是有着8g内存的,同样不要尽数用完。一定要预留,拿JVM为5g,依据规则三分之二,五分之三。为何不可设置太高呀那是因为JVM对于保存这些操作进行自动处理时,它也是要消耗资源的,这属于是个自动的过程 。要是资源设置得过度满当,一旦设置得过度满当,或许你整个系统运行起来会极其缓慢,操作系统是需要内存的吧,其他软件也是需要内存的吧,在 JVM 把内存全部占尽的情形下,或许操作系统就连登录都没法成功,SSH 这个工具或许连登录都无法实现,这可就麻烦到了极点,是生产环境特别忌讳的。生产环境通常会对进程以及日志的信息进行监控,一旦出现相关状况都会加以处理的,在公司内部一般都是存在一个流程的 。

接收到告警信息,随之着手展开排查工作。经由初步判断,凭借主观臆断(今日存在人员上线操作,那么昨天XX是否又推出新功能了呢,要知道他可是个容易引发问题的家伙呀。)现场予以保留(将出现问题的机器进行隔离,让所有请求均不再指向这台机器,关闭该机器上所有的服务路径,处于毫无头绪的情形下)迅速实施重启(重启这种方法堪称最佳),此套路并非仅是网管所采用的方式,实际上在软件开发领域同样是最为有效的。绝对具备实用性。能够快速实现恢复且实用。针对问题展开排查:对应用程序日志进行分析,同时查看JVM的日志。最终给出相应的解决方案。

出现内存溢出情况后,在设置完所提及的那个命令之后,D盘也就会生成一个快照,在崩溃之际,内存里面究竟存了些什么东西,JVM挂掉了,这是需要去进行解刨的,且快照是需要把它打开的。

下载eclipse的分析工具:

这是一个网址,这个网址是https://www.eclipse.org/mat/downloads.php 。

自动进行分析,生成报表

关键字是数组,具体是数组出现的。

上边的工具可以快速分析,比较好用的,直接了当的给出结论,

jmap与进程IP构建连接,jmap这个指令极为耗费资源,内存占用同样很高,这便是要保留资源的缘由,致使生产环境举步维艰。运用命令务必要灵活运用。

jcmd 查看出来对应的PID

二、执行,利用jmap这个工具,进行转储操作,设置为只转存存活的对象,规定格式为b,指定文件名称为文件名称.hprof,通过-F参数结合PID来进行 。

这个工具纵使具备远程功能,然而通常情况下的开发是不准许对生产环境的机器进行连接的,是要去重现那种过程 ,呀!

(二)常用的log,gc工具

系统报错时内存、操作系统与CPU的情况,每个接口请求的情况,还有运维工具 。

大众点评开源的catzabbix

请注意,这里说的调优或者报表工具来说,关键在于一些细节之处,并非会去记录下来,面对如此众多的工具,思路是极为重要的,要清楚知晓有这个工具能够做这件事情,大致可以分析出哪些内容,诸如内存方面的问题,多数情形下均是能够预防的,问题定位相对较为直接,而且工具数量也不少,只是问题出现后不太好进行回复,内存逐渐堆积升高的状况,是能够借助监控工具发觉的,在宕机之前予以解决,在开发的时候 。

相关推荐: