记一次 .NET 某妇产医院 WPF内存溢出分析
一:背景
1. 讲故事
上个月有位朋友通过博客园的短消息找到我,说他的程序存在内存溢出情况,寻求如何解决。
要解决还得通过 windbg 分析啦。
二:Windbg 分析
1. 为什么会内存溢出
大家都知道内存溢出对应着 .NET 中的 OutOfMemonryException
异常,这种异常有可能是托管代码手工抛出的,也有可能是CLR层面抛出的,言外之意就是可以通过两种方式排查。
托管线程是否挂载着异常?
0:000> !t
ThreadCount: 23
UnstartedThread: 0
BackgroundThread: 5
PendingThread: 0
DeadThread: 17
Hosted Runtime: noLock ID OSID ThreadOBJ State GC Mode GC Alloc Context Domain Count Apt Exception0 1 362c 00fac868 26020 Preemptive 7ED701A0:00000000 00fa6b60 0 STA 5 2 2d70 00fbeba0 2b220 Preemptive 7EBA7AC0:00000000 00fa6b60 0 MTA (Finalizer) 7 3 3264 061c8890 102a220 Preemptive 00000000:00000000 00fa6b60 0 MTA (Threadpool Worker) 17 15 3f98 19682b90 202b220 Preemptive 7EBB0830:00000000 00fa6b60 0 MTA
XXXX 16 0 2845fb00 35820 Preemptive 00000000:00000000 00fa6b60 0 Ukn 18 14 a7c 2842b1c8 202b220 Preemptive 00000000:00000000 00fa6b60 0 MTA
XXXX 6 0 2c9b3778 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 18 0 288a1318 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 23 0 288a22f0 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 10 0 2ccf3550 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 21 0 288a1860 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 12 0 288a1da8 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 11 0 2c993640 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 8 0 2ccf3a98 35820 Preemptive 00000000:00000000 00fa6b60 0 Ukn
XXXX 9 0 2ccf2030 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 7 0 2c9aed88 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 26 0 28898308 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 25 0 2c492c68 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 4 0 2c993b88 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 20 0 2c9af2d0 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 17 0 2c9afd60 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker)
XXXX 24 0 2c9b1280 1039820 Preemptive 00000000:00000000 00fa6b60 0 Ukn (Threadpool Worker) 23 22 2658 2c9b02a8 1029220 Preemptive 7ED5BFF8:00000000 00fa6b60 0 MTA (Threadpool Worker)
从输出信息看,这些线程并没有挂载任何托管异常,我去。。。
是否在 CLR 上抛出
这主要是看 托管堆(heap)
上的内存分配或者gc回收造成的内存不足,可以用 !ao
命令。
0:000> !ao
There was no managed OOM due to allocations on the GC heap
从输出信息看也没有任何异常,尴尬了
记一次 .NET 某妇产医院 WPF内存溢出分析相关推荐
- 记一次 .NET 医院CIS系统 内存溢出分析
一:背景 1. 讲故事 前几天有位朋友加wx求助说他的程序最近总是出现内存溢出,很崩溃,如下图: 和这位朋友聊下来,发现他也是搞医疗的,哈哈,.NET 在医疗方面还是很有市场的???????????? ...
- 内存溢出分析之工具篇
内存溢出分析之工具篇 转载于:https://www.cnblogs.com/lwmp/p/9850446.html
- JVM 调优实战--jmap的使用以及内存溢出分析
目录 jmap的使用以及内存溢出分析 查看内存使用情况 查看内存中对象数量及大小 将内存使用情况dump到文件中 通过jhat对dump文件进行分析 通过MAT工具对dump文件进行分析 MAT介绍 ...
- java内存溢出分析工具:jmap使用实战
java内存溢出分析工具:jmap使用实战 在一次解决系统tomcat老是内存撑到头,然后崩溃的问题时,使用到了jmap. 1 使用命令 在环境是linux+jdk1.5以上,这个工具是自带的,路 ...
- linux环境下内存溢出分析MAT
文章目录 1 下载及安装mat 1.1 下载地址 1.2 查看服务器版本 1.3 下载安装 2 配置 3 运行 4 分析 1 下载及安装mat 1.1 下载地址 https://www.eclipse ...
- Linux下tomcat内存溢出分析及优化
为什么80%的码农都做不了架构师?>>> 常见的内存溢出有以下两种: java.lang.OutOfMemoryError: PermGen space java.lang.O ...
- Java内存溢出分析
内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题.内存溢出与锁表则不然,一 ...
- Android内存溢出分析
内存溢出,是Android开发中常遇到的问题,解决起来总是摸不着头脑.今天爬爬就来讲讲如何定位内存溢出. 1. OOM(内存溢出)和Memory Leak(内存泄露)有什么关系? OOM可能是因为Me ...
- JVM内存溢出分析-实战JVM(二)
为什么80%的码农都做不了架构师?>>> JVM规范规定,除了程序计数器,虚拟机其他内存区域均会发生内存溢出的可能,OutOfMemoryError(OOM) 原文地址:htt ...
最新文章
- 分词器 keras.preprocessing.text.Tokenizer
- 第三方登录过程—OAuth2.0协议
- JavaScript学习笔记(2)
- pytorch常用函数API简析与汇总——以备查询
- java api 英文_教你查阅Java API 英文文档(JDK 11)
- CSP2021提高组复赛解析
- SQL Alias(别名)
- git pull冲突:commit your changes or stash them before you can merge.
- 共享计算机用户帐户限制怎么办,win7系统使用共享功能被提示用户账户限制的解决方法...
- 金山卫士界面源码解读及界面库分离(4)
- 微信公众平台iPhone版开始内测了
- 用Matlab将坐标添加到地图上
- 《C++ Primer Plus》第八章习题与参考答案
- BT下载伤硬盘的解决办法
- [转]Java可以拿來开发游戏吗?
- JDOM解析xml文件
- 计算机桌面屏幕怎么设置全屏,如何让电脑显示器屏幕显示全屏
- qt槽函数如何传递多个参数_Qt中connect函数不能传递参数的两种解决方法
- python爬虫之静态网页(以当当网图书畅销榜榜为例)
- 学习笔记(15):R语言入门基础-增加行或列
热门文章
- 江城子/密州出猎——苏轼
- 再谈模拟器上网!!(Symbian OS S60)
- unity中第三人称游戏摄像头遮挡的处理
- 14_ue4进阶末日生存游戏开发[第一人称和第三人称的切换]
- Python学习笔记 day5
- nginx启动报错:nginx: [emerg] https protocol requires SSL support in /usr/local/nginx/conf/ngi
- DW07D 二合一锂电池保护 IC
- 如何预防 XSS 攻击 和 XSRF 攻击
- Java输入月份输出季节
- 美智库为机器人时代战争支招