【222】内存溢出及定位

  • Post author:
  • Post category:其他



b76faf3eb5eed89ee9f660e65b6912cb.gif



题目部分(原文见公众号:python宝)

python宝

https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5NjIyOTE4OQ==&scene=123#wechat_redirect

小麦苗DB宝

https://www.xmmup.com/





答案部分


1.简介

内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。memory leak会最终会导致out of memory!


2.内存溢出的现象

  • tps(每秒处理的消息数Transaction Per Second)出现大幅波动,并慢慢降低,甚至降为0,响应时间随之波动,慢慢升高

  • 通过jstat(JVMStatisticsMonitoringTool虚拟机统计信息监视工具)命令看到,Jvm中Old区不断增加,FullGC非常频繁,对应的FullGC消耗的时间也不断增加。参考https://blog.csdn.net/do_finsh/article/details/122609021

    注:jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

  • 通过jconsole/jvisualvm可以看到,堆内存曲线不断上升,接近上限时,变成一条直线

  • 日志报错java.lang.OutOfMemoryError: Java heap space 内存逐步上升


3.内存溢出的定位方法

  • 通过jmap命令:jmap -histo pid | head -20,查看当前堆内存中实例数和占用内存最多的前20 个对象

  • 通过jvisualvm,进行远程堆dump,然后把dump文件下载下来,用jvisualvm打开进行分析,可以看到更直观的jvm中对象的信息

4.查看JVM运行状态的常用命令

-gc 垃圾回收统计
-gcnew 新生代垃圾回收统计
-gcold 老年代垃圾回收统计
-gcutil 垃圾回收统计(百分比)


-gccapacity 堆内存统计
-gcmetacapacity 元数据空间统计
-gcnewcapacity 新生代内存统计
-gcoldcapacity 老年代内存统计
-compiler 编译统计
-printcompilation JVM编译方法统计




jstat -gc 12141 1000 40  打印gc信息 每隔1000ms 打印40次
jstat -gcutil 12141 1000 40

a.监控jvm的GC情况

# 先查看进程号
ps -ef|grep java
# 监控GC情况
jstat -gcutil pid 1000  100

b.查看堆配置信息

# 查看java进程的堆配置信息,各区的空间大小和配置信息
jmap -head pid

c. 查看jvm中类和对象的占用情况

jmap -histo pid | head -20

d.堆文件dump

# 对堆内存进行dump,以文件的形式进行保存下来
jmap -dump:format=b,file=文件名.hdump  pid


5、解决可以从以下方面考虑

  • 增加MaxPermSize的值

  • 减少系统需要的类的数量

  • 使用ClassLoader合理地装载各个类,并定期回收

参考:

https://blog.csdn.net/weixin_46361114/article/details/123175638

e3725cb3bb36a9c7f03290a52ce83760.jpeg


About Me:


小麦粒

● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 个人微信号:pythonbao 联系我加微信群

● 个人QQ:87605025

● QQ交流群py_data :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

4f8c7f59f962a8ddea7f9878a293bd19.gif


如果你觉得到文章对您有帮助,

点击下方我的头像,赞赏我哦!


有您的支持,小麦粒一定会越来越好!