谁遇到过客户端或中间服务死掉的问题啊一天六七次(200分)

  • 主题发起人 主题发起人 kaithink
  • 开始时间 开始时间
K

kaithink

Unregistered / Unconfirmed
GUEST, unregistred user!
三层,不到30个客户端(win9x),六七个中间服务在同一台服务器上做为NT服务运行
DCOM+ADO模式
问题,客户端有时会突然死掉,比如正要打开一个库存模块的界面,死掉了
然后就整个客户端程序就死掉了,结束任务,再运行客户端,再点那个库存模块的界面,仍死掉,...一直如此
不得已,把库存的服务重启(状态显示它还是运行中)
客户端再运行进去点库存就可以了
一天会出现五次左右
 
你如果用的是PC服务器的话就我觉得可能不奇怪。因为PC服务器的能力确实有限,用SocketConnection也同样有这样的问题,服务器的带负载能力很弱,建议你的服务器端采用对象缓冲池技术,这样就不必为每个连接的客户端创建一个服务对象,可以大幅度的降低资源消耗,减少数据库的连接数量。关于对象缓冲池的技术可以参考Delphi的例子,在Delphi5/Demos/Midas/Pooler中,这一招是比较有效的。
另外,30个客户端对于PC服务器已经是比较多了,特别是对于Midas这种应用,加之数据量再多一些,服务器的开销会更大,所以可能还要增加一些硬件投资。
顺便跟你扯两句,我以前也遇到过这种情况,6、7个用户一连,服务器马上就受不了,不过我用的是SocketConnection连接的,主要是SocketServer不行了,无奈,后来又自己写了一个SocketServer的服务器采用完成端口的模式才算搞定。就是客户端多的时候等待时间长一点,但是不会造成服务器的瘫痪。
 
我也发现,Pc 服务器,用户一多就死机
 
楼上两位
我们的服务器不是普通PC
是一台一两万的DELL,是专门买来做服务器的,里面除了一个定时备份程序外再没有装其它的东西,难道还是档次太低?
 
我的服务器端两三个礼拜死一次客户都吵得我头痛,一天五六次,呵呵。。。
你的客户端非法退出之后可能服务器端的远程对象没有释放,所以第二次进去还有问题,个人观点不一定对
 
如果DCOM服务里只有一个ADOConnection
由于ADOConnection也是apartment模式,只能有一个并发线程
一旦对ADOConnection调用失败,其它的对象就不能使用ADOConnection
重起服务实际上就是重新初始化了ADOConnection
所以应该在DCOM服务里建立多个ADOConnection
同时监控ADOConnection的使用情况
这样还可以提高DCOM服务的并发度
 
我以前也经常遇到这种问题,很烦人,后来把ADOConnection放到RemoteDataModal中就好了。
 
做的也太差了吧
 
呵呵,如果不是机子性能的问题
那么肯定是程序出问题了,重新调试,…………
 
楼上老大,怎么调试啊
没有规律啊
沉香屑:
每个模块一个独立应用服务器,如库存,采购,销售,生产控制等,都是独立的EXE NT服务形式,每个应用服务器一个ADOConnection,情况的确是如库存死了,其它采购之类还可以用。难道真的是这个ADOCONNECTION出错之后不能再用?
怎样在DCOM服务里建立多个ADOConnection?望指点迷津!
 
并不是ADOConnection的问题,apartment 线程模型也没有问题。我建议还是用对象缓冲池比较好,能省很多资源的,你可以看看Delphi5/Demos/Midas/Pooler下的例子,应该能帮你缓解一下。
 
1.不要再服务器做关于用户界面的操作,除非你有把握处理线程同步
2.数据库是否死锁,或当住
3.中间层死循环
 
Delphi6也要自己实现poolor?
现在我老是搞不清楚李维书(D5版)里讲得哪些是D5要做的,哪里是D6要做的
 
重装服务器就好了
 
呵呵,我至今对三层还是糊里糊涂,打算静修2个月。
 
中间层用delphi7+ADO+ com+模式
 
这就是编写普通三层带来的后果,我也一直想编写,却不敢动手。
不是三层不好,是我功夫还不到家。发现还是典型的二层更稳定,
何况前端的客户计算机性能越来越好。顺带说一下,我的数据库客
户端几乎很少掉线,除非网络故障或管理员在服务器端将它KILL。
 
重装服务器?
我也有这个想法
这个服务器是电脑部装的
我现在想试试POOLER,各位意下如何?
 
重装服务器,换WIN2003 SERVER
加大内存,看看效果先。
 
后退
顶部