- 博客(285)
- 收藏
- 关注
原创 LruCache在美团DSP系统中的应用演进1
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:58
824
3
原创 LruCache在美团DSP系统中的应用演进2
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:56
988
3
原创 LruCache在美团DSP系统中的应用演进3
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:54
632
1
原创 LruCache在美团DSP系统中的应用演进4
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:52
767
2
原创 LruCache在美团DSP系统中的应用演进5
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:50
578
2
原创 LruCache在美团DSP系统中的应用演进6
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:47
617
1
原创 LruCache在美团DSP系统中的应用演进7
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:45
663
2
原创 LruCache在美团DSP系统中的应用演进8
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:43
919
2
原创 LruCache在美团DSP系统中的应用演进9
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:41
602
4
原创 LruCache在美团DSP系统中的应用演进10
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:39
816
原创 LruCache在美团DSP系统中的应用演进11
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:36
897
2
原创 LruCache在美团DSP系统中的应用演进12
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:34
898
2
原创 LruCache在美团DSP系统中的应用演进13
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:32
561
2
原创 LruCache在美团DSP系统中的应用演进14
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:30
749
2
原创 LruCache在美团DSP系统中的应用演进15
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 08:47:27
588
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现1
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:44
868
3
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现2
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:41
808
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现3
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:38
830
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现4
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:29
786
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现5
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:24
747
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现6
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:21
946
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现7
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:20
733
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现8
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:18
752
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现9
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:16
928
4
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现10
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:14
871
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现11
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:12
685
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现12
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:10
817
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现13
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:07
998
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现14
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:05
763
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现15
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 00:47:03
1010
4
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结14
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:19:11
668
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结1
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:19:05
1133
4
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结2
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:19:02
803
6
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结3
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:19:00
553
2
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结4
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:18:56
990
3
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结5
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:18:54
657
2
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结6
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:18:52
559
3
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结7
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:18:50
745
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结8
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:18:49
640
2
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结9
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:18:46
1049
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人