热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

内存暴增排查分析

一次偶然间,发现测试环境iis站点内存突然间暴增,平常都是300M,这次一下子暴增到8g于是就开始了接下来的分析发现Dictionary居然有1.78g懵逼windbg分析1.看看

一次偶然间,发现测试环境iis站点内存突然间暴增,平常都是300M,这次一下子暴增到8g 于是就开始了接下来的分析

技术分享图片

发现Dictionary居然有1.78g懵逼

  windbg 分析

1. 看看当前进程的 commit 内存有多大


0:000> !address -summary
Mapping file section regions...
Mapping module regions...
Mapping PEB regions...
Mapping TEB and stack regions...
Mapping heap regions...
Mapping page heap regions...
Mapping other regions...
Mapping stack trace database regions...
Mapping activation context regions...
--- Usage Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
Free
402 7df9`8ed48000 ( 125.975 TB) 98.42%
1239 206`619ca000 ( 2.025 TB) 99.99% 1.58%
Image
1833 0`0b792000 ( 183.570 MB) 0.01% 0.00%
Heap
36 0`02cdf000 ( 44.871 MB) 0.00% 0.00%
Stack
111 0`01240000 ( 18.250 MB) 0.00% 0.00%
Other
13 0`001e2000 ( 1.883 MB) 0.00% 0.00%
TEB
37 0`0004a000 ( 296.000 kB) 0.00% 0.00%
PEB
1 0`00001000 ( 4.000 kB) 0.00% 0.00%
--- Type Summary (for busy) ------ RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_MAPPED
326 200`00c57000 ( 2.000 TB) 98.76% 1.56%
MEM_PRIVATE
1111 6`64ebf000 ( 25.577 GB) 1.23% 0.02%
MEM_IMAGE
1833 0`0b792000 ( 183.570 MB) 0.01% 0.00%
--- State Summary ---------------- RgnCount ----------- Total Size -------- %ofBusy %ofTotal
MEM_FREE
402 7df9`8ed48000 ( 125.975 TB) 98.42%
MEM_RESERVE
431 205`5900d000 ( 2.021 TB) 99.79% 1.58%
MEM_COMMIT
2839 1`1829b000 ( 4.378 GB) 0.21% 0.00%
--- Protect Summary (for commit) - RgnCount ----------- Total Size -------- %ofBusy %ofTotal
PAGE_READWRITE
978 1`08d1c000 ( 4.138 GB) 0.20% 0.00%
PAGE_EXECUTE_READ
308 0`07428000 ( 116.156 MB) 0.01% 0.00%
PAGE_READONLY
1061 0`0487b000 ( 72.480 MB) 0.00% 0.00%
PAGE_NOACCESS
139 0`02909000 ( 41.035 MB) 0.00% 0.00%
PAGE_EXECUTE_READWRITE
41 0`00a6f000 ( 10.434 MB) 0.00% 0.00%
PAGE_WRITECOPY
273 0`004cf000 ( 4.809 MB) 0.00% 0.00%
PAGE_READWRITE
|PAGE_GUARD 37 0`00071000 ( 452.000 kB) 0.00% 0.00%
PAGE_EXECUTE_WRITECOPY
2 0`00024000 ( 144.000 kB) 0.00% 0.00%
--- Largest Region by Usage ----------- Base Address -------- Region Size ----------
Free 18b`42fc0000 7c69`2df10000 (
124.411 TB)
7dfb`9b527000 1f9`b0c13000 ( 1.975 TB)
Image 18a`
10662000 0`00d7d000 ( 13.488 MB)
Heap 18a`
13631000 0`00f5e000 ( 15.367 MB)
Stack
44`0acd0000 0`0007b000 ( 492.000 kB)
Other
185`c4a60000 0`00181000 ( 1.504 MB)
TEB
44`0ae08000 0`00002000 ( 8.000 kB)
PEB
44`0afac000 0`00001000 ( 4.000 kB)

 可以看出大概占了 4.378G,接下来再看看托管堆内存。


0:000> !eeheap -gc
Number of GC Heaps:
4
------------------------------
Heap
0 (00000185C55B4F90)
generation
0 starts at 0x00000185C6C45838
generation
1 starts at 0x00000185C6C3DC88
generation
2 starts at 0x00000185C5CB1000
ephemeral segment allocation context: none
segment begin allocated size
00000185C5CB0000 00000185C5CB1000 00000185C6EB1850
0x1200850(18876496)
Large
object heap starts at 0x00000189C5CB1000
segment begin allocated size
00000189C5CB0000 00000189C5CB1000 00000189D435D6F0
0xe6ac6f0(241878768)
0000018580000000 0000018580001000 00000185ADC5CD08 0x2dc5bd08(767933704)
0000018AE2FC0000 0000018AE2FC1000 0000018B3E878BC8
0x5b8b7bc8(1535867848)
Heap Size: Size:
0x98dc0810 (2564556816) bytes.
------------------------------
Heap
1 (00000185C56835E0)
generation
0 starts at 0x00000186C6C263D8
generation
1 starts at 0x00000186C6C18578
generation
2 starts at 0x00000186C5CB1000
ephemeral segment allocation context: none
segment begin allocated size
00000186C5CB0000 00000186C5CB1000 00000186C7293328
0x15e2328(22946600)
Large
object heap starts at 0x00000189D5CB1000
segment begin allocated size
00000189D5CB0000 00000189D5CB1000 00000189D5F53350
0x2a2350(2761552)
Heap Size: Size:
0x1884678 (25708152) bytes.
------------------------------
Heap
2 (00000185C5576960)
generation
0 starts at 0x00000187C6C3B2A0
generation
1 starts at 0x00000187C6C334E0
generation
2 starts at 0x00000187C5CB1000
ephemeral segment allocation context: none
segment begin allocated size
00000187C5CB0000 00000187C5CB1000 00000187C768E0D8
0x19dd0d8(27119832)
Large
object heap starts at 0x00000189E5CB1000
segment begin allocated size
00000189E5CB0000 00000189E5CB1000 00000189F326E728
0xd5bd728(224122664)
Heap Size: Size:
0xef9a800 (251242496) bytes.
------------------------------
Heap
3 (00000185C557E9B0)
generation
0 starts at 0x00000188C6F71D30
generation
1 starts at 0x00000188C6F4F758
generation
2 starts at 0x00000188C5CB1000
ephemeral segment allocation context: none
segment begin allocated size
00000188C5CB0000 00000188C5CB1000 00000188C7543728
0x1892728(25765672)
Large
object heap starts at 0x00000189F5CB1000
segment begin allocated size
00000189F5CB0000 00000189F5CB1000 00000189F5D310C0
0x800c0(524480)
0000018AB2FC0000 0000018AB2FC1000 0000018AE0C1CD08
0x2dc5bd08(767933704)
0000018A14590000 0000018A14591000 0000018A2B3BEF20
0x16e2df20(383967008)
Heap Size: Size:
0x4639c410 (1178190864) bytes.
------------------------------
GC Heap Size: Size:
0xef97ba98 (4019698328) bytes.

 查看托管堆


0:000> !dumpheap -stat 0000018AE2FC1000 0000018B3E878BC8
Statistics:
MT Count TotalSize Class Name
00000185c56d3570
1 30 Free
00007ffb0720ee48
1 1535867816 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]
Total
2 objects

0:000> !dumpheap -mt 00007ffb0720ee48 0000018AE2FC1000 0000018B3E878BC8
Address MT Size
0000018ae2fc1020 00007ffb0720ee48 1535867816
Statistics:
MT Count TotalSize Class Name
00007ffb0720ee48 1 1535867816 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]
Total 1 objects

0:000> !DumpHeap /d -mt 00007ffb0720ee48
Address MT Size
00000185c6a56ac8 00007ffb0720ee48 616
0000018580001020 00007ffb0720ee48 767933672
0000018ae2fc1020 00007ffb0720ee48 1535867816
00000188c6da9e30 00007ffb0720ee48 296
0000018ab2fc1020 00007ffb0720ee48 767933672
Statistics:
MT Count TotalSize Class Name
00007ffb0720ee48 5 3071736072 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]
Total 5 objects
Fragmented blocks larger than 0.5 MB:
Addr Size Followed by
00000185C6AE9878 0.6MB 00000185C6B8CAA8 System.Byte[]
00000186C6E723F0 4.1MB 00000186C72912D8 System.Byte[]
00000187C715B2B8 5.2MB 00000187C768C088 System.Byte[]
00000188C6E2E7D8 0.6MB 00000188C6ED1A08 System.Byte[]

0:000> !gcroot 0000018ae2fc1020
Thread be58:
000000440BF3B6C0 00007FFAAAE74E00 Xw.Service.ProductCategoryService.GetParentCategoryId(Int32, System.Collections.Generic.Dictionary`2, Int32 ByRef)
rdi:
-> 00000185C6A64458 System.Collections.Generic.Dictionary`2[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]]
-> 0000018AE2FC1020 System.Collections.Generic.Dictionary`2+Entry[[System.Int32, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]][]



看到这行代价就大概知道是什么问题了,果断查询项目文件,才发现,这个方法是一个递归方法。因为数据的原因导致出现了无限递归,所以导致 System.Int32 和System.Collections.Generic.Dictionary 都很高

非常感谢博客园里面的大佬

https://www.cnblogs.com/huangxincheng/p/14830664.html

也是按照他的来一步步分析的。


推荐阅读
  • 本文详细介绍超文本标记语言(HTML)的基本概念与语法结构。HTML是构建网页的核心语言,通过标记标签描述页面内容,帮助开发者创建结构化、语义化的Web页面。 ... [详细]
  • 本文探讨了在使用Selenium进行自动化测试时,由于webdriver对象实例化位置不同而导致浏览器闪退的问题,并提供了详细的代码示例和解决方案。 ... [详细]
  • 本文深入探讨了线性代数中向量的线性关系,包括线性相关性和极大线性无关组的概念。通过分析线性方程组和向量组的秩,帮助读者理解这些概念在实际问题中的应用。 ... [详细]
  • 本文介绍如何在 C++ 中使用链表结构存储和管理数据。通过具体示例,展示了静态链表的基本操作,包括节点的创建、链接及遍历。 ... [详细]
  • 本文旨在提供一套高效的面试方法,帮助企业在短时间内找到合适的产品经理。虽然观点较为直接,但其方法已被实践证明有效,尤其适用于初创公司和新项目的需求。 ... [详细]
  • 本文探讨了使用C#在SQL Server和Access数据库中批量插入多条数据的性能差异。通过具体代码示例,详细分析了两种数据库的执行效率,并提供了优化建议。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 哈密顿回路问题旨在寻找一个简单回路,该回路包含图中的每个顶点。本文将介绍如何判断给定的路径是否构成哈密顿回路。 ... [详细]
  • JavaScript 中创建对象的多种方式
    本文介绍了 JavaScript 中创建对象的几种常见方法,包括字面量形式、构造函数、原型对象等。每种方法都有其特点和适用场景,通过对比分析,帮助开发者选择最适合的方式。 ... [详细]
  • 算法题解析:最短无序连续子数组
    本题探讨如何通过单调栈的方法,找到一个数组中最短的需要排序的连续子数组。通过正向和反向遍历,分别使用单调递增栈和单调递减栈来确定边界索引,从而定位出最小的无序子数组。 ... [详细]
  • 查找最小值的操作是很简单的,只需要从根节点递归的遍历到左子树节点即可。当遍历到节点的左孩子为NULL时,则这个节点就是树的最小值。上面的树中,从根节点20开始,递归遍历左子 ... [详细]
  • 在使用STM32Cube进行定时器配置时,有时会遇到延时不准的问题。本文探讨了可能导致延时不准确的原因,并提供了解决方法和预防措施。 ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
author-avatar
牧童的伙伴_168
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有