java 内存不断增加_记一次java应用内存不断增长问题解决过程

1、在解决问题之前,先看下jvm堆内存结构,如下图所示:

6bc8e6b3efb5ce4f28dee4147539e6c8.png

对于Java应用,虚拟机管理的内存,可以参考如下图所示:

9d752c53c9eec26c96c993abf2f541b7.png

一般对于一个应用来说,如果内存使用过大,可以从两块来分析,第一:堆内存,第二:堆外内存。下面着重从这两个方面阐述下对最近遇到的内存问题进行分析并解决的过程。

问题详情:

本人负责了一个应用,主要就是定时调度一批接口任务,同时提供一些对外接口,功能很简单,在使用的过程中,逐渐发现了几个内存问题。

1、oom问题,发现一段时间后,应用进程就没了,查看日志提示内存溢出,内存被吃光了,不够分配下个资源使用的空间了。

2、第一个问题解决后,添加了几个功能,发现又出现一些问题:应用运行一段时间后,发现,内存随着时间不段推移,内存占用也越来越多,一般4天后,内使用几乎达到90%,很吓人。

第一个问题解决过程:

oom问题,一般就是程序代码处理不当造成的,有些资源没有释放或者一直在循环开辟某些内存资源。分析这个问题,我使用了本地jvm的一个工具,找到对应的jdk/bin/jvisualvm 工具,它是用来JVM监测、故障排除、分析工具,主要以图形化界面的方式提供运行于指定虚拟机的Java应用程序的详细信息。

1、本地启动程序后,同时打开jvisualvm,在jvisualvm工具可视化页面有多个选项tab,可以根据需求,选择对应的tab进行使用,而我主要对profiler进行了使用,同时发现了问题,进而解决了问题,如下图所示:

f37f4177b6ee3c53ee0336fca216b3f9.png

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的内存溢出是指应用程序中存在无法回收的内存或使用的内存过多,导致程序运行所需的内存超过了虚拟机能提供的最大内存限制。\[1\]在Java中,主要有两个区域与内存溢出相关,即Java堆和方法区。Java堆主要用于存放对象实例和数组等,而方法区则用于保存类信息、常量、静态变量等。运行时常量池也是方法区的一部分。这两个区域是线程共享的,当它们无法分配足够的内存时,就会抛出OutOfMemoryError异常。\[2\] 要模拟Java部分接口的内存溢出,可以在程序中创建一个循环,不断地将字符串进行拼接,直到内存溢出。例如,可以使用以下代码来模拟内存溢出的逻辑: ```java @RequestMapping("/testOutOfMemory") @ResponseBody public void testOutOfMemory() throws Exception { String name = "Aikes"; for (int i = 0; i < 10000000; i++) { name += name; } System.out.println(name); } ``` 在这段代码中,我们通过循环将字符串`name`不断地与自身进行拼接,使其不断增长,直到超过虚拟机所能提供的最大内存限制,从而导致内存溢出。\[3\] #### 引用[.reference_title] - *1* *2* [java内存溢出](https://blog.csdn.net/u014401141/article/details/122825443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java内存溢出问题排查分析](https://blog.csdn.net/AikesLs/article/details/124290879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值