热门标签 | 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

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


推荐阅读
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 几何画板展示电场线与等势面的交互关系
    几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
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社区 版权所有