情况:
  我自己编写了一个Remoting服务端,这个服务端大的作用有两个,第一是利用一定的规则读取数据库中的数据放到缓存中,第二是如果当缓存中是数据发生更改时候,利用我的即时通讯系统将更改的数据,发送到客户端让正在使用客户端的用户的数据能够即时的更新。问题:
  这个服务器大约经过连续运行15--20天的时候就会崩溃,我说的崩溃不是说程序退出或者结束,而是服务器自动重启或蓝屏啦。我曾经关闭服务器上的所有多余的程序包括IIS都被我停止啦,只运行这个Remoting服务端和数据库,但是还是会崩溃。所以我就想请教各位大虾,这是什么原因呢?
说明:
  1、服务端是利用C#编写的,在程序中启用了线程池(优化),数据库连接池(默认),客户端访问池(优化),异常处理及捕获并对异常信息有完整的备份,重构Dispose函数以便释放资源,编写析构函数并调用GC进行垃圾回收。我觉得我已经考虑的够全面的啦。哎~~~~~~
  2、服务器重启的时间和我捕获的最后一次产生异常信息时间相差很长一般都相差好几个小时,所以我认为不太可能是因为异常导致的服务器重启。而且服务器每次重启之间的间隔时间并无非常明显的规则,最短是14天,最长是22天,重启的时间都在早7点至晚6点之间,70%的情况是在中午的时候重启。
  3、通过对程序运行日志的查看,服务器的CPU占用率一般都不会超过5%,服务器的内存变化也比较稳定,不会有逐步增加或突然猛增的情况,每次重启之前日志显示服务器的内存占用一般都在2G之内(服务器16G内存).而且对程序中各个主要变量占用内存情况的分析显示:最大的一个变量占用内存是“41908字节”(注意是字节不是KB),而使用频率比较高的变量占用内存都不会超过“3000字节”。所以理论上应该不会存在内存溢出的现象。
  4、观察服务器系统中的“事件查看器”和“性能日志和警报”并未发现可疑和规律。
   这个问题折磨死我啦,绞尽了我所有的脑汁,浪费了我无数的时间,榨干了我全部的智慧,所以请高位高手帮帮忙,看看能不能提供些思路。万分感谢

解决方案 »

  1.   

    你是什么系统,什么格式分区?
    如果是windows2003服务器系统,ntfs格式分区,应该不会随意蓝屏。
    如果蓝屏,很有可能是硬件出现问题
    一,是否是天气过热,而蓝屏
    二,内存是否插稳
    三,硬盘是否有坏区
      

  2.   

    系统是:windows2003 ,分区格式:ntfs
    天气太热是不可能啦,因为机房里有空调。
    内存保证是插的很好。
    硬盘连的是磁盘柜99%应该是没问题的。
    没有这个服务器之前,运行几个月都不会重启,除非我手动重启。再说咱们专门招聘了2个人负责硬件的维护。应该没问题 
      

  3.   

    .NET程序有保护, 程序问题应该最多是程序当掉了.
    系统当掉多半是硬件问题.
      

  4.   

    不清楚,我一个项目用的是windows服务+线程轮询+TCP通讯,放在电信服务器上,连续运行了快2年了也没崩溃过,现在还在跑,还是程序问题,崩溃可能是线程的读写内存冲突、死锁引起的,看看有没有要加锁的地方,资源及时释放,必要的时候强行执行垃圾回收,也可能是软件冲突木马病毒
    “重构Dispose函数以便释放资源,编写析构函数并调用GC进行垃圾回收”析构函数一般是不用写的,非托管资源在Dispose里释放就可以了
    仔细查看这里面的写法,考虑得过多,代码写得过于复杂反而容易出错,因为每多一句就多一行错误的可能,