记一次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网站,将很久不用的网站都删除. 因为需要删除的比较多,正在使用的很少,就将网站全部删除了,然后准备重新添加需要用的. 在添加了网站后,点击启动按钮,发现网站启动不了,因为网站 ...
随机推荐
- IOCP编程原理(转)
在我的博客之前写了很多关于IOCP的“行云流水”似的看了让人发狂的文章,尤其是几篇关于 IOCP加线程池文章,更是让一些功力不够深厚的初学IOCP者,有种吐血的感觉.为了让大家能够立刻提升内力修为,并 ...
- 关于EMGCU中的cvertern.dll无法找到的问题
方法1:自己到EMgucv目录的bin里面拷贝x86文件夹到自己程序的debug目录 方法2:将这个X86目录添加到PATH变量,记得要注销,否则新添加的无法起作用,VS2010还显示无法找到.
- Struts旅程(六)Struts页面转发控制ActionForward和ActionMapping
转自:https://blog.csdn.net/lovesummerforever/article/details/19125933
- 监控和安全运维 1.5 nagios监控客户端-1
3. Nagios安装 - 客户端(192.168.0.12)在客户端机器上 rpm -ivh http://www.aminglinux.com/bbs/data/attachment/forum/ ...
- cmake的一个编译报错
在一台新搭建的服务器上执行cmake的时候,报了如下错误: $ cmake ./ -- The C compiler identification is unknown -- The CXX comp ...
- MSSQL 当前数据库中已存在用户或角色,SQLServer2008,错误15023,
原因: sql server中“登录”与“用户”的区别,“登录”用于用户身份验证,而数据库“用户”帐户用于数据库访问和权限验证.登录通过安全识别符 (SID) 与用户关联.将数据库恢复到其他服务器时, ...
- while 用法 for 循环的总结
格式化输出.%s %d # name = input('请输入名字:') # age = input('请输入年龄:') # sex = input('请输入性别:') # # msg = '我的名字 ...
- cf688B-Lovely Palindromes
http://codeforces.com/problemset/problem/688/B B. Lovely Palindromes time limit per test 1 second me ...
- Ros学习——launch文件解析
launch文件的重点是:节点(node)元素的集合. roslaunch 则是让所有的节点共享同一个终端. 1.标签(元素)说明 1. group标签 2. node标签 <group ns= ...
- jquery.pagination.js使用
直接上代码: <script type="text/javascript"> var pageIndex = 1; //页面索引初始值 var pageSize = 1 ...