最新要闻
- 超划算!冷酸灵泵式牙膏5件套39元发车(送牙刷+漱口水)
- 天天热点!M.2 SSD秒变移动硬盘!酷冷至尊神钥Air图赏
- 焦点速讯:亚航被曝行李超重5公斤补收1807元:拍照被威胁不要上飞机
- 【全球新要闻】极氪官方二手车上线:不以盈利为目的 只收12万公里0事故车辆
- 精选!安卓“女皇”王雪红爆料苹果MR头显最快年中发布:HTC不担心竞争
- 法系车疯狂降价 12万买C级车雪铁龙C6!有销售一天卖车150多台
- 热点聚焦:豆瓣评分仅6.0:《蚁人3》周末北美票房暴跌61%
- 资讯:淄博烧烤店开门一分钟坐满大学生:组团去山东撸串火出圈
- 699元起 荣耀手表GS 3i发布:14天长续航、支持血氧监测
- 《巫师3》叶奈法玩偶推出:真人尺寸 能替换服饰
- 当前快看:北京故宫三八节门票预定时间是几点?
- 索尼推出IMX611景深传感器:实现高精度物距测量
- 天热来两件!220g重磅精梳棉:放克男士纯色T恤20元大促
- 小米手机在家就能自助检测!支持充电、网络等12项自检
- 全球快报:北京、郑州等14个省会级城市气温创今年来新高:或挑战历史最暖纪录
- 和14 Pro一样!iPhone 15全系登岛:苹果又搞了新配色
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
今日热搜:一次Java服务内存过高的分析过程
现象
年前,收到了短信报警,显示A服务的某台机器内存过高,超过80%
如上图所示,内存会阶段性增加。奇怪的是,十多台机器中只有这一台有这个问题
堆内内存分析
最先怀疑是内存泄漏的问题,所以首先使用jmap命令把堆dump下来
【资料图】
jmap -dump:format=b,file=service.hprof 1948
用MAT分析堆文件发现了一个奇怪的问题,下载下来7G的文件MAT显示的Size只有700M
后来知道不加live选项会把堆中所有的对象dump下来,即使是已经是垃圾的对象
参考 what are "live" objects in java heap? (heap dump with jmap)
live 选项会在讲堆内容dump到文件时,强制做一次fullGC,剩下的就是live对象,也就是从GC Root可以寻达的对象
为什么有时不能用live呢,因为fullGC可能会让应用卡主,不能接受这种情况适用不增加live选项
后来我重新使用了live选项dump下来有900M
jmap -dump:live,file=live-dump.bin
MAT的内存泄漏报告
首先用MAT的Leak Suspect看一下
看到了org.springframework.boot.loader.LaunchedURLClassLoader
这个对象有240M
因为一直不太清楚live选项的原因,所以就想用其他工具看看这7G到底都是什么
IDEA自带工具分析
把hprof拖入IDEA,就可以看到上图,上面分析了所有的对象,从占用的大小就可以看出来
其中的Shallow表示的是:
对象本身占用内存的大小,也就是对象头加成员变量(不是成员变量的值)的总和
Retained表示的是:
如果一个对象被释放掉,那会因为该对象的释放而减少引用进而被释放的所有的对象(包括被递归释放的)所占用的heap大小,即对象被垃圾回收器回收后能被GC从内存中移除的所有对象之和。
具体参考一文让你理解什么是shallow heap及retained heap
我们把前几名的Shallow加起来也有好几G了
也可以点进Object[]查看这700多万的对象数组都是什么
可以看到一个占用450M的Object[10240]属于LaunchedURLClassLoader
上图中可以看到这450M中TagCateSimilarityUtils占了200M, 这是一个本地缓存,虽然占的多了一点,通过比对正常服务器的堆转储,是没有问题的
查看int[]对象时,发现了很多Retained是0的对象,也就是说这些对象已经是不可达对象,只不过还没有被回收,那是不是就是只要让这些对象回收了,内存占用就下来了
解决垃圾回收问题
上面分析中看到了很多对象没有被回收,怀疑是没有FullGC(Mixed)所以老年代中的垃圾对象,一直都没回收,看了一下JVM参数
-Xmx8g -Xms8g -Xmn4g -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=32m -Dfastjson.parser.safeMode=true
调整为,删除了一些默认和不生效的参数,移除了Xmn,交给G1自己调整
-Xmx8g -Xms8g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=32m -Dfastjson.parser.safeMode=true
不过并没有解决问题,此时我发现了新的问题:
- 按理GC完只有不到1G的对象,为什么监控中会显示内存很高呢
- 设置了Xms=8g,按理一启动就会占用至少8G内存,监控为什么是从6G开始增长的
这个问题和虚拟内存和实际内存有关,可以参考linux top命令 实存(RES)与虚存(VIRT)详解
VIRT:
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;2、假如进程新申请10MB的内存,但实际只使用了1MB,那么它会增长10MB,而不是实际的1MB使用量。
RES:
1、进程当前使用的内存大小2. 如果申请10MB的内存,实际使用1MB,它只增长1MB,与VIRT相反;
监控显示的内存是实际占用的内存,Xms设置的是虚拟内存,参考降低 Java 程序的“虚拟内存地址”占用
可以看出 Java Heap 与 Metaspace 紧挨着分配,两块一共占用了 3GB 的 Size(虚拟内存地址空间),而表征物理内存占用的 Rss 却只有 673288KB。也就是说,mmap 只是给进程分配一个线性区域(虚拟内存),并没有分配物理内存,只有当进程访问这块内存时,操作系统才会分配具体的内存页给进程,这就是 Linux 内存管理的延迟分配策略
内存一旦被分配给Java程序,就不会还给操作系统了,所以监控看起来内存就是只增不减,个人理解这样对于Java程序也是有好处的,不用频繁申请内存,对于垃圾的区域标记然后就可以重新写了
Java也存在JVM参数-XX:+AlwaysPreTouch 来实现启动就把堆内存全都申请到
为了抵消延迟分配策略,在进程启动时强制分配好 Java Heap 的物理内存,虽然增加了启动延时,但是可以减少进程运行时由于分配内存造成的延时
总结
堆内内存是正常的,不存在内存泄漏,只是正常的内存使用增长
堆外内存分析
在搜索LaunchedURLClassLoader内存泄漏问题时,看到了Spring Boot引起的“堆外内存泄漏”排查及经验总结,学到了如何进行堆外内存分析
一次完整的JVM堆外内存泄漏java故障排查记录也是一篇值得学习的如何分析堆外内存的文章
不过我们问题产生的原因和上面的不一致
使用pmap分析应用的内存占用,但不太容易看出是什么占用了内存
pmap -x 1927 | sort -k3 -r -n
JVM的NativeMemoryTracking参数会看到更详细,不过需要重启,而且会有5%-10%的性能损耗
// 写在启动参数上面-XX:NativeMemoryTracking=detail// 生成内容在下图中jcmd 1927 VM.native_memory detail scale=MB > temp3.txt
经过对堆外内存的观察,发现确实有一些比较高,例如线程占700M,发现了有很多不必要的线程,但不是随着时间不断增加的
上图中的Total一行的commited=9788MB,表示Java应用程序堆内加堆外内存最大可达这么多,这么一算12 * 0.8 = 9.6G,确实超了报警阈值
这样看来,堆外内存也没有问题,是Xmx和内存阈值设置的不匹配,导致内存正常使用的情况下报警了,也是没有合理预估堆外内存占用的原因,堆外占了快2G的内存
将报警阈值调到85%,发现内存在周期性的增长和减少,并不会超过阈值,如下图
总结
服务的内存使用情况是正常的,无论是堆内还是堆外内存,需要做的是设置合理的堆内存大小,预估堆外内存大小,合理设置报警阈值
通过这次分析也学习了如何对Java程序内存进行分析,也学习了很多工具
- MAT
- GC在线分析工具
也意思到监控工具的重要性,在看别人分析的过程中,一般都会对JVM资源进行监控,这样就能很明显看出资源的动态,因为我们目前没有这样的工具,所以分析起来就比较麻烦
附
前面提到其中只有一台机器有这个现象,还没有找到原因,不过有几个现象:
- 内存增长快
- 部分日志大小比其他机器大
- 耗时每隔一段时间会增加
对比日志发现是Redis超时比较多,所以怀疑可能是机器网络的问题,不过目前还无结论
参考
[1] 一文让你理解什么是shallow heap及retained heap[2] linux top命令 实存(RES)与虚存(VIRT)详解[3] 降低 Java 程序的“虚拟内存地址”占用[4] 一次完整的JVM堆外内存泄漏java故障排查记录[5] Spring Boot引起的“堆外内存泄漏”排查及经验总结
数据漂移问题及解决方案
全球新资讯:(数据库系统概论|王珊)第十章数据库恢复技术-第三节:故障种类
今日热搜:一次Java服务内存过高的分析过程
超划算!冷酸灵泵式牙膏5件套39元发车(送牙刷+漱口水)
天天热点!M.2 SSD秒变移动硬盘!酷冷至尊神钥Air图赏
焦点速讯:亚航被曝行李超重5公斤补收1807元:拍照被威胁不要上飞机
【全球新要闻】极氪官方二手车上线:不以盈利为目的 只收12万公里0事故车辆
精选!安卓“女皇”王雪红爆料苹果MR头显最快年中发布:HTC不担心竞争
环球视点!统一日志输出打印POST请求参数
法系车疯狂降价 12万买C级车雪铁龙C6!有销售一天卖车150多台
热点聚焦:豆瓣评分仅6.0:《蚁人3》周末北美票房暴跌61%
资讯:淄博烧烤店开门一分钟坐满大学生:组团去山东撸串火出圈
699元起 荣耀手表GS 3i发布:14天长续航、支持血氧监测
《巫师3》叶奈法玩偶推出:真人尺寸 能替换服饰
全球速看:stegsolve与zsteg的使用
环球即时:用线性二次模型建模大型数据中心,基于 MPC 进行冷却控制
环球头条:2023,大前端技术趋势及小程序未来分析
全球球精选!如何使用JDBC将Cordova应用程序连接到MySQL数据库?
当前快看:北京故宫三八节门票预定时间是几点?
索尼推出IMX611景深传感器:实现高精度物距测量
天热来两件!220g重磅精梳棉:放克男士纯色T恤20元大促
小米手机在家就能自助检测!支持充电、网络等12项自检
全球快报:北京、郑州等14个省会级城市气温创今年来新高:或挑战历史最暖纪录
和14 Pro一样!iPhone 15全系登岛:苹果又搞了新配色
全球通讯!旖旎是什么意思
当前滚动:hutool XML反序列化漏洞(CVE-2023-24162)
焦点热讯:【MRTK】解决 Unity.IL2CPP.Building.BuilderFailedException: Lump_libil2cpp_vm.cp
记录--uni-app中安卓包检查更新、新版本下载、下载进度条显示功能实现
焦点信息:基于datax抽取mysql数据到HDFS
阅读并手撸JS版Naive Ui Admin骨架
京东客服确认:百亿补贴商品不支持价保!
世界消息!“点对点”自动驾驶 红旗发布E702官图:百公里人工接管小于0.5次
速讯:2499元 荣耀观影眼镜发布:轻至80g、500nit入眼亮度
世界实时:荣耀最强旗舰!一图了解荣耀Magic5至臻版:6699元
环球焦点!超薄+四种体验:冈本Okamoto金装系列1.7元/枚大促
要闻:拖胆选号怎么玩_拖胆选号
Django-2
当前观点:【建议收藏】超详细的Canal入门,看这篇就够了!!!
当前快看:3.6 C提高3day
本地硬盘文件映射公网 cpolar轻松做到
顶象中标GovHK香港政府一站通数字化项目
每日播报!《消费者报告》公布最不可靠的10款电动车:特斯拉双车上榜
微头条丨荣耀Magic 5系列亮相:曲面屏也能拥有直屏体验
天天精选!女子算命核桃树挡姻缘 家人将树砍掉:当事人称要相信科学
安装Redis6.2.7主从哨兵集群教程
当前视点!NTP对时服务器(NTP电子时钟)重要参数指标表
焦点速讯:接口安全性问题02——jwt身份验证与授权
短讯!熬夜后心里咯噔一下要注意:有三大风险
全球快讯:浪费人才?酒店回应去一本院校招聘洗碗工:2千工资对应发展空间广
环球观热点:努比亚Z50 Ultra缩小系统固件:仅8个不可卸载应用
【天天快播报】特斯拉失控、单踏板风波不断 为何还买?吉利李书福:建议大家买国产新能源汽车
2月XGP最佳游戏玩家投票:俄罗斯3A大作《原子之心》荣获第一
A/B 实验避坑指南:为什么不建议开 AABB 实验
观速讯丨.NET7依赖注入
3月6日译名发布:乔治·桑托斯
黄鳝吃什么东西
看点:699元 小米米家首款智能钢琴灯发布:雷达感应自动开关灯
天天微资讯!降低水产品检测标准!日本坚决核污水排海 100%移除放射性元素做不到
专家呼吁每天省杯咖啡提前规划养老:背后商业版图显现 网友无语满嘴跑火车
一个摄像头就能让虚拟人唱跳rap:抖音即可玩
有哪些值得收藏的运营思维导图?
环球速看:在工作中最容易犯的3个大忌
环球头条:1-基础入门
每日热门:网络安全(中职组)-B模块:Windows操作系统渗透测试
当前资讯!你也能成为“黑客”高手——趣谈Linux Shell编程语言
每辆都是碰撞测试车 特斯拉全球首创真实碰撞测试系统
当前热点-惊蛰习俗有哪些?专家科普:吃梨、吃“懒龙”了解下
【世界报资讯】33万买奥迪A7L!上汽回应“内购价最高优惠16万”:正严查信息外泄
马斯克:曾对加密货币感兴趣 现在钟情于AI
《数据万象带你玩转视图场景》第一期:avif图片压缩详解
每日热讯!计算两个字符串的相似度
2023年兔年金银币价格表(2023年03月06日)
199元!小米推出米家分体露营灯:Type-C接口 满电亮100小时
高速公路“见缝插针”超车致事故 司机:我莽撞了
每日动态!魅族史上最大规模!魅族20系列发布会定点上海梅赛德斯奔驰文化中心
全球滚动:预计上涨0.16元/升!国内油价将于17日24时起再调整
全球视讯!《卧龙:苍天陨落》捏人系统受盛赞 胸部拉到最大也不违和
关于情侣的四字成语有哪些?关于情侣个性签名大全
专业人才入库证书有什么作用?从专业人才走向管理心得体会
花羊羊是谁的妈妈?花羊羊为什么没和村长在一起?
海麻线是什么东西?海麻线的营养价值及功效
MySQL安装入门第一篇
【SpringBoot】AOP默认的动态代理
前端设计模式——工厂模式
电脑怎么设置休眠模式?休眠和待机有什么区别?
洗衣机不进水是哪里的问题?洗衣机不进水怎么处理?
电脑mac地址怎么更改?电脑mac地址查询方法
网件路由器怎么恢复出厂设置?网件路由器哪款性价比高?
全球头条:鼠标是无法识别的usb设备_鼠标成为无法识别的USB设备 怎么办
苹果笔记本好用吗?苹果笔记本换电池需要多少钱?
百度地图怎么看实时街景?百度地图怎么看历史导航轨迹?
全球短讯!极氪汽车被指销售欺诈 有车主坐在体验店门口集体维权
雷军大会发言:小米汽车预计明年上半年量产 一定把车造好!
极致豪华!长城魏牌蓝山内饰官图发布:35万选它还是理想L8
每日资讯:一文看懂2023年CPU如何选:AMD锐龙7000X3D游戏性能封神
阿里拍卖上线湾流G450公务机!博主:近几年最具性价比的一架
全球观天下!055期暗皇福彩3D预测奖号:组选6码参考
焦点报道:【个人杂谈】大体重程序员如何减肥?(个人总结向)
Python、C++、Swift或任何其他语言会取代Java吗?为什么?
速递!koreanDollLikeness_v10模型下载及使用