- 博客(285)
- 收藏
- 关注
原创 LruCache在美团DSP系统中的应用演进12
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:31
991
2
原创 LruCache在美团DSP系统中的应用演进1
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:23
812
1
原创 LruCache在美团DSP系统中的应用演进2
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:17
658
2
原创 LruCache在美团DSP系统中的应用演进3
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:14
709
1
原创 LruCache在美团DSP系统中的应用演进4
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:13
823
2
原创 LruCache在美团DSP系统中的应用演进5
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:10
537
1
原创 LruCache在美团DSP系统中的应用演进6
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:08
972
3
原创 LruCache在美团DSP系统中的应用演进7
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:07
657
3
原创 LruCache在美团DSP系统中的应用演进8
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:03
554
3
原创 LruCache在美团DSP系统中的应用演进9
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:41:02
895
原创 LruCache在美团DSP系统中的应用演进10
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:40:59
975
2
原创 LruCache在美团DSP系统中的应用演进11
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:40:57
1051
3
原创 LruCache在美团DSP系统中的应用演进13
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:40:54
933
1
原创 LruCache在美团DSP系统中的应用演进14
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:40:50
926
1
原创 LruCache在美团DSP系统中的应用演进15
LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。这一算法的核心思想是当缓存数据达到预设上限后,会优先淘汰近期最少使用的缓存对象。LruCache内部维护一个双向链表和一个映射表。链表按照使用顺序存储缓存数据,越早使用的数据越靠近链表尾部,越晚使用的数据越靠近链表头部;映射表通过Key-Value结构,提供高效的查找操作,通过键值可以判断某一数据是否缓存,如果缓存直接获取缓存数据所属的链表节点,进一步获取缓存数据。
2024-12-31 10:40:47
725
4
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现14
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:41
765
4
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现3
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:34
874
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现5
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:31
998
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现1
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:27
785
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现2
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:21
632
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现4
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:17
939
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现6
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:11
978
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现7
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:07
671
3
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现8
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:05
611
3
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现9
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:02
857
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现10
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:45:01
889
2
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现11
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:44:57
833
1
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现12
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:44:55
618
3
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现13
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:44:53
954
3
原创 iOS 覆盖率检测原理与增量代码测试覆盖率工具实现15
以上是我们在代码开发质量方面做的一些积累和探索。通过对覆盖率生成、解析逻辑的探究,我们揭开了覆盖率检测的神秘面纱。开发阶段的增量代码覆盖率检测,可以帮助开发者聚焦变动代码的逻辑缺陷,从而更好地避免线上问题。iOS 覆盖率检测原理与增量代码测试覆盖率工具实现 - 美团技术团队日常开发Guava提效工具库核心实用指南梳理_guava string转list-CSDN博客从ES的JVM配置起步思考JVM常见参数优化_es jvm配置-CSDN博客。
2024-12-30 08:44:51
811
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:22:53
742
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结2
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:22:51
664
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结3
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:22:48
975
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结4
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:22:46
600
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:22:44
865
3
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结6
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:22:41
724
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结7
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:22:39
938
3
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结8
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:22:37
840
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:22:35
976
1
原创 Spring Boot引起的“堆外内存泄漏”排查及经验总结10
因为strace命令中已经显示申请内存的线程ID。直接使用命令jstack pid去查看线程栈,找到对应的线程栈(注意10进制和16进制转换)如下:strace申请空间的线程栈这里基本上就可以看出问题来了:MCC(美团统一配置中心)使用了Reflections进行扫包,底层使用了Spring Boot去加载JAR。因为解压JAR使用Inflater类,需要用到堆外内存,然后使用Btrace去追踪这个类,栈如下:btrace追踪栈然后查看使用MCC的地方,发现没有配置扫包路径,默认是扫描所有的包。
2024-12-29 19:22:33
991
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人