记一次IIS应用程序域崩溃的原因
在日常工作中,每次新的功能上线前,我们会搭建一个测试环境提供给客户测试使用,确定无误后才会更新到正式环境上。这一次也不例外,在约定好时间地点,客户进行集中化测试的过程中,反应网站系统打不开,报500错误。打开测试服务器后发现应用程序池崩溃自动关闭了。所以习惯性的右键-重启,查日志。可是好景不长,这边问题还没找到,又崩溃了。没办法先稳住再说,对应用程序池进行如下设置:

这样可以防止应用程序池崩溃的过于频繁。可是治标不治本,再次崩溃是迟早的问题。
通过服务器的日志查看器,只能看到下面的信息

虽然不能看到更多信息,但是通过搜索异常代码: 0xc00000fd基本上可以判断是内存泄漏导致的应用程序池崩溃。
为了进一步了解具体情况,需要分析一下dmp文件。如何生成dmp文件?看下面
开启 Windows Error Reporting Service 服务
,
(将上面的状态改成“已启动”)
设置w3wp.exe 崩溃时自动抓取dmp文件,保存在D:\dumps文件夹里
(将如下脚本保存为reg文件,双击执行即可,这块若有异议可以自行百度,我也是百度的)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe]
"DumpFolder"=hex(2):64,00,3a,00,5c,00,64,00,75,00,6d,00,70,00,73,00,00,00
"DumpCount"=dword:00000002
"DumpType"=dword:00000002
IIS崩溃后,会在D:\dumps里面生成一个dmp文件,如下

其实这个时候再通过事件查看器查看已经可以看出问题是栈溢出,和发生的对象信息是MPMS.Domain。

虽然知道了发生的具体对象,但可惜的是并没有放在心上,而是认为一个领域对象,用来映射数据库字段用的怎么可能会发生内存溢出呢,又没有死循环的方法在里面。事实证明我错了,先不急。看看我是怎么折腾自己的。
既然dmp都有了,来分析一波吧。
打开Windbg神器,加载dmp文件,直接查看栈信息,执行!dumpstack (windbg的使用,百度)


get_AppFundSh() 被大量的执行调用。问题发生在MPMS.Domain.RequestForm.BuyApprovalForm中的AppFundSh这个字段上。
于是我让同事帮忙看下这个字段什么情况。同事给的结论是,有这个字段,但是数据库没有添加相应的字段与之匹配,可能是Ibatis.net在映射的时候发生问题。
可是根据堆栈反馈的信息来看,如果发生在ORM上,应该会定位到,可是堆栈信息上没有任何Ibatis的踪迹。所以让通知本地调试看看什么情况,结论是,没有任何异常情况发生,表单可以正常的提交。
这个时候我已经被带偏了,我应该亲自看一下这个代码,亲自调试一下看看的。不断的敲着windbg的命名,查看各种对象的内存使用情况,分析一遍又一遍的重复堆栈信息。虽然我不认为是字段映射匹配的问题,但一定是哪个地方的逻辑循环调用导致这个问题的发生。
没有办法亲自调试看看,把断点加到出问题的方法里面,折腾后赫然发现,原来一直与我擦肩而过,被忽视的问题出在

Get 返回自己,导致死循环。
记一次IIS应用程序域崩溃的原因的更多相关文章
- 记一次IIS站点出错的解决过程
记一次IIS站点出错的解决过程 以前一直都是人家用着系统出问题了反馈过来这边改,没想到这回就发生在自己使用的过程中 问题经过 我正在执行一个操作,保存了没有返回提示,打开浏览器控制台查看网络,请求返回 ...
- JVM崩溃的原因及解决!
JVM崩溃的原因及解决! 前些天,搞JNI的时候,报了个JVM崩溃的错.错误信息如下: # # An unexpected error has been detected by HotSpot Vir ...
- 记一次Linux内核崩溃:kdump,crash,vmcore
原理 Linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore. 可以通过分析vmcore分析出内核崩溃的原因. crash是一个被广泛应用的内核奔溃转储文件分析工具.使用crash调试 ...
- [CareerCup] 12.2 Find the Reason of Crash 找到程序崩溃的原因
12.2 You are given the source to an application which crashes when it is run. After running it ten t ...
- iOS9,10没有问题,iOS8上面一登录就崩溃,原因Assets的问题
在项目中开发中,打包成一个ipa的包,发现iOS9,10,运行非常流畅,iOS8上面一运行就崩溃,找了好久,才找到原因竟然是Assets的问题,一开始我把ipa包放在蒲公英上面托管扫码下载的,用iTu ...
- 记一次IIS发布网站导致系统时常跳入登录页面的问题解决
服务器:winserver2012R2 iis 发布网站后,正常浏览网页,时常跳到登录页面,第一反应session过期,因为登录信息都存在session,但session 都是默认配置过期时间为20分 ...
- Qt程序继承QApplication发生崩溃的原因
一.前情介绍 QApplication是Qt开发中经常用到的一个类,用来管理应用程序的生命周期.跟其相关的类还有QCoreApplication和QGuiApplication,分别用于不同场景下为应 ...
- windows安装IIS不成功的原因
一.背景 之前做过一段时间的实施,因此总结一下IIS安装不成功会有哪些原因导致的,希望给踩坑的人提供思路和帮助. 二.分析原因 1.系统问题,比如Windows家庭版本(独白:我之前花了一天的时间安装 ...
- 记一次IIS网站启动不了的问题排查
今天清理了下机器中的IIS网站,将很久不用的网站都删除. 因为需要删除的比较多,正在使用的很少,就将网站全部删除了,然后准备重新添加需要用的. 在添加了网站后,点击启动按钮,发现网站启动不了,因为网站 ...
随机推荐
- myelipse中部署路径deploy location出现错误
背景: 因java_web项目中的所有代码以及资源文件突然无法提交,在尝试过诸多方法无果后,果断删除项目重新将down下来.启动Tomcat无问题,使用原来的访问连接报错.经检查发现加载至Tomcat ...
- spring学习七
一: web.xml中常用配置元素? <servlet></servlet>: 在向servlet或JSP页面制定初始化参数或定制URL时,首先命名servlet或JSP页面. ...
- c语言-顺序表
在数据结构中包含两种,一种线性结构(包括顺序表,链表,栈,队列),一种非线性结构(树,图), 顺序表,其实就是在内存动态数组,Java中的ArrayList就是一个典型的顺序表,它在顺序表的基础上增加 ...
- [我的CVE][CVE-2017-15709]Apache ActiveMQ Information Leak
问题原因: Apache ActiveMQ默认消息队列61616端口对外,61616端口使用了OpenWire协议,这个端口会暴露服务器相关信息,这些相关信息实际上是debug信息. 会返回应用名称, ...
- MySQL中的多表插入更新与MS-SQL的对比
MySQL多表插入: INSERT INTO tdb_goods_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_c ...
- spring读取classpath目录下的配置文件通过表达式去注入属性值.txt
spring读取配置文件: 1. spring加载配置文件: <context:property-placeholder location="classpath:config/syst ...
- ORACLE体系结构一 (实例(instance))--ORACLE_SID
数据库实例(也称为服务器Server)就是用来访问一个数据库文件集的一个存储结构及后台进程的集合.它使一个单独的数据库可以被多个实例访问(也就是ORACLE并行服务器-- OPS).实例在操作系统中用 ...
- 线段树教做人系列(1)HDU4967 Handling the Past
题意:给你n组操作,分别为压栈,出栈,询问栈顶元素.每一组操作有一个时间戳,每次询问栈顶的元素的操作询问的是在他之前出现的操作,而且时间戳小于它的情况.题目中不会出现栈为空而且出栈的情况. 例如: p ...
- 生产者与消费者-1:1-基于list
一个生产者/一个消费者: /** * 生产者 */ public class P { private MyStack stack; public P(MyStack stack) { this.sta ...
- mac 彻底卸载Paragon NTFS
之前安装了paragon NTFS,试用期过了就卸载了,但是每天还是会提示“试用期已到期”,看着很烦. 百度了一下,发现网上的版本可能比较老了,和我的情况不太一样,但道理应该是一样的. 彻底删除方法: ...