记录一个ChinaPay.dll模块导致应用程序池崩溃关闭的问题,其实半年前就曾遇到这个问题,当初只是简单的处理下,想以后重构这个功能,毕竟主要原因还是清楚的。但是人算不如天算,到现在都还没重构这个旧版本的ChinaPay支付功能模块。
先说下具体情况,引发应用程序池(Application Pool)崩溃并停止的主要原因是一个旧版本的银联在线支付功能模块(ChinaPay)。这是一个用ASP写的模块,兼容性存在很大问题,特别是在64位系统上并不是那么稳定。由于IIS上Application Pool默认的故障防护设置(如果在5分钟的间隔内应用程序池的工作进程发生5次崩溃,应用程序池就会关闭),每次崩溃都会引发网站返回HTTP 503的错误。
半年前为了临时解决这个问题,特意设置了故障间隔分数数和最大故障数量,设置5分钟可以接受崩溃20次,没想到现在又出现了:
临时的解决办法只能在加大故障间隔和故障数了,根本的解决方法还是需要重构ChinaPay的支付功能,取消原本使用ASP写的支付功能,采用新框架编写支付方式。其实只要仔细阅读官方文档,就会发现文档中已经指出了ChinaPay部分模块对64位系统和.net版本的兼容问题,也有具体的解决办法!
关于故障防护设置(RapidFailProtection),建议直接看官方的资料:Failure Settings for an Application Pool <failure>
自己也可以打开一个应用程序池,右键进入高级设置,选中对应的属性,查看底部的解释说明:
最后在贴下具体的故障信息,这个故障一般记录在Windows日志的应用程序类别中,来源是Application Error:
作者:十有三
出处:https://shiyousan.com/post/636178259937876415
版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。