在日常工作中,每次新的功能上线前,我们会搭建一个测试环境提供给客户测试使用,确定无误后才会更新到正式环境上。这一次也不例外,在约定好时间地点,客户进行集中化测试的过程中,反应网站系统打不开,报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应用程序域崩溃的原因的更多相关文章

  1. 记一次IIS站点出错的解决过程

    记一次IIS站点出错的解决过程 以前一直都是人家用着系统出问题了反馈过来这边改,没想到这回就发生在自己使用的过程中 问题经过 我正在执行一个操作,保存了没有返回提示,打开浏览器控制台查看网络,请求返回 ...

  2. JVM崩溃的原因及解决!

    JVM崩溃的原因及解决! 前些天,搞JNI的时候,报了个JVM崩溃的错.错误信息如下: # # An unexpected error has been detected by HotSpot Vir ...

  3. 记一次Linux内核崩溃:kdump,crash,vmcore

    原理 Linux内核发送崩溃时,kdump会生成一个内核转储文件vmcore. 可以通过分析vmcore分析出内核崩溃的原因. crash是一个被广泛应用的内核奔溃转储文件分析工具.使用crash调试 ...

  4. [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 ...

  5. iOS9,10没有问题,iOS8上面一登录就崩溃,原因Assets的问题

    在项目中开发中,打包成一个ipa的包,发现iOS9,10,运行非常流畅,iOS8上面一运行就崩溃,找了好久,才找到原因竟然是Assets的问题,一开始我把ipa包放在蒲公英上面托管扫码下载的,用iTu ...

  6. 记一次IIS发布网站导致系统时常跳入登录页面的问题解决

    服务器:winserver2012R2 iis 发布网站后,正常浏览网页,时常跳到登录页面,第一反应session过期,因为登录信息都存在session,但session 都是默认配置过期时间为20分 ...

  7. Qt程序继承QApplication发生崩溃的原因

    一.前情介绍 QApplication是Qt开发中经常用到的一个类,用来管理应用程序的生命周期.跟其相关的类还有QCoreApplication和QGuiApplication,分别用于不同场景下为应 ...

  8. windows安装IIS不成功的原因

    一.背景 之前做过一段时间的实施,因此总结一下IIS安装不成功会有哪些原因导致的,希望给踩坑的人提供思路和帮助. 二.分析原因 1.系统问题,比如Windows家庭版本(独白:我之前花了一天的时间安装 ...

  9. 记一次IIS网站启动不了的问题排查

    今天清理了下机器中的IIS网站,将很久不用的网站都删除. 因为需要删除的比较多,正在使用的很少,就将网站全部删除了,然后准备重新添加需要用的. 在添加了网站后,点击启动按钮,发现网站启动不了,因为网站 ...

随机推荐

  1. DataGrid 单元格输入验证 由ValidatingEditor事件完成

    private void gdv_reguline_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContai ...

  2. UML 学习[一]

    上了好久软件工程,才开始这门课程中重要部分的学习----uml图. 统一建模语言(UML,英语:Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方 ...

  3. 语法错误: 标识符“acosf”

    1>e:\vs2010\vc\include\cmath(19): error C2061: 语法错误: 标识符“acosf” 1>e:\vs2010\vc\include\cmath(1 ...

  4. 剑指offer 38_统计数组中k出现的个数

    思路: 二分法,分别找出第一个和最后一个k出现的位置.相减 加一 #include <stdio.h> //获取第一个K的位置 int getFirstK (int k,int *numb ...

  5. requestLayout, invalidate和postInvalidate的异同

    requestLayout 当一个VIEW的布局属性发生了变化的时候,可以调用该方法,让父VIEW调用onmeasure 和onlayout重新定位该view的位置,需要在UI线程调用 invalid ...

  6. 蓝桥杯【入门训练】 Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...

  7. 【摘自张宴的"实战:Nginx"】使用nginx的proxy_cache模块替代squid,缓存静态文件

    #user nobody;worker_processes 1; error_log logs/static_source.error.log;#error_log logs/error.log no ...

  8. c语言学习笔记 scanf和printf格式的问题

    int a =0; int b =0; scanf("%d %d",&,&b); 上面这种和下面这种哪种对? int a =0; int b =0; scanf(& ...

  9. 算法Sedgewick第四版-第1章基础-007一用两个栈实现简单的编译器

    1. package algorithms.util; import algorithms.ADT.Stack; /****************************************** ...

  10. java过滤器 Fliter

    定义:过滤器是一个服务器端组件,他可以截取用户端请求信息与响应信息,并对信息进行过滤 例:当进入csdn要进行文章编辑时,检测用户是否登录,若未登录,跳转到登录界面. 过滤器操作方法: init() ...