一、记一次内存泄漏(jmap+jhat)(jmap+MAT)

2024-02-22 07:48
文章标签 内存 一次 泄漏 jmap mat jhat

本文主要是介绍一、记一次内存泄漏(jmap+jhat)(jmap+MAT),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题描述

系统日志显示 RocketMQ相关的异常报错

 

二、分析

1.RocketMQ的broker进程被干掉了

2.free 查看内存情况,发现 buff/cache 2G,这个缓存不正常

3.检查 RocketMQ配置的内存大小,1G,配置正常

4.检查Karaf占用内存,ps -ef | grep karaf ,800M,正常

 

三、解决

尝试方案一:清除buff/cache

 echo 3 > /proc/sys/vm/drop_caches 

 结果不理想,buff/cache 大小几乎没减少,只清除掉几M

 

尝试方案二:检查Java内存泄漏

1、导出内存快照

方式很多,使用JDK自带的工具jmap导出

jmap -dump:format=b,file=/opt/dump_0317.hprof 26783 

 

2、分析内存快照

2.1使用JDK自带的工具jhat分析

jhat -J-Xmx1024M /opt/dump_0317

 

2.2、使用MAT工具分析

1)导入快照

 

2)查看内存泄漏概况

 

 

 

 

 

 

2)查看内存泄漏疑点1的细节

 

 

找到一个自己定义的类,重点分析它

 

 

 

 

 

 

 

 

 

 

查看一下 GCRoots

 

 

 

 

发现session有问题

 

结合代码进行分析,发现session永不过期,问题找到。修复:

 

1、接口被大量恶意请求时,会在服务器生成大量session

解决:服务器收到请求时,并不创建session。

1)确认登陆成功后,创建session

2)请求携带合法token时,若session为空,创建session

 

2、session失效时间

从最后一次访问起,5分钟销毁。

 

这篇关于一、记一次内存泄漏(jmap+jhat)(jmap+MAT)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734590

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常