操作系统:winserver2008R2(特别说明是阿里云服务器)
数据库:Sql server 2008 R2
开发语言:C#(vs2012)
上面放了多个win服务都是用了ThreadPool.QueueUserWorkItem(线程池),但其中一个(假设A吧)偶尔会出现“错误模块名称: KERNELBASE.dll”这个错误,其他的win服务都没出现过,出现这个错误的时候A服务就直接崩溃了停止,没有任何异常日志输出,我在可能的地方都加了try/catch,但就是没有异常日志,网上查了很多资料都试了(重新下载KERNELBASE.dll覆盖,程序所在文件夹权限,配置文件删除多余项,检查代码死循环,检查sql语句等),然并卵,错误依然出现,求大神们指教,有碰到过的麻烦告知下怎么处理的
特别说明:不是服务启动就出现或者启动不了,是正常跑起来了,过程中会偶尔出现,有时候一天1次都不出现有时候一天出现2-3次
麻烦有碰到过此问题的兄弟分享下后面是如何解决的,园豆少了我可以再单独加
多线程公用队列数据,lock锁没放对地方
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
看能不能抓到异常信息。
好的,我今晚试试
没用,没异常
@破晓幽灵: 你这代码放哪了?而且对应的方法怎么写的?
@Daniel Cai: 放在服务主程序里面的,方法代码:
/// <summary>
/// 处理应用程序域内的未处理异常
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
var ex = e.ExceptionObject as Exception;
Loger.Error(ex);
}
catch (Exception ex)
{
Loger.Error(ex);
}
}
@Daniel Cai: 不过我好像定位到问题了,因为多线程的问题,我上午改了下,到现在还没有崩过,明早上来看下如果没有崩,那就说明问题已经修复了
@Daniel Cai:已经解决了,是多线程公用队列数据的问题
你好,博主。我现在碰到了跟你一样的问题,票务系统的一台服务器出现这种问题,检票软件老自动关闭!有什么好的建议吗师兄
用上面那位仁兄的办法处理下未捕获的异常看下就知道了,记得要放在主程序里面,这样你就会看到你的服务是为什么崩溃了,我就是这样监测出来是因为多线程公用队列问题