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

  • 主题发起人 主题发起人 kaithink
  • 开始时间 开始时间
这个问题我上个月也遇到了,不过我最多一天是从新启动中间三次,我花了大半夜的功夫解决了这个问题,其实解决办法很简单,你把你的adoconnection 方在你的远程数据模块里面就可要咯,这样它会为每个用户自动建立一个连接,用户关闭他自动释放,我现在的已经有一个月没有出问题了,至于为每个模块建立一个应用服务的exe大可不必,为了小组开发的方便你可要以为每个模块建立一个数据模块,然后在远程数据模块中建立这个数据模块,注册provider便可要咯
 
中间层用delphi7+ADO+ com+模式 ,别用什么远程数据模块.
我是通过协调对象调用个mts数据模块,用了几个月,没死机.
 
可以这样测试:
在一个服务器方法中sleep,占用这个服务器中的ADOConnection
如果这时,其他的调用也被阻塞了,就证明ADOConnection是不能被多线程使用的
需要做ADOConnection的缓冲
最简单的方法是定义一个ADOConnection数组
有请求来就分配一个,并且做标记
记得对标记用TCriticalSection保护
 
忘了提一个很重要的因素
一是PMC,一是采购部,这两个部门有差不多二十个客户端在用
而且同一个功能可能好几个人在同时用
在死机后查SQL SERVER的锁
突然想到会不会是因为锁的原因
比如某个查询使用存储过程
假如同时有几个人在使用这个查询的话
会不会是这个时候死呢
因为存储过程里边都没有用明锁,都是隐式锁
查询是这样
如果是更新的话。。。。。。。汗
 
应该不会是存储过程的问题,其自动调事务的。
 
建议换缓冲池方式
再好的性能也经不起太多的连接数
 
to:liudz
我的是放在一个公用数据模块里并非远程数据模块里,远程数据模块数据集共用这个数据模块的连接,看这个就明白:
TSevPubDataModule = class(TDataModule)
SeAdoCon: TADOConnection;
private
{ Private declarations }
public
{ Public declarations }
end;
你说的很有道理,但那样的话是不是又回到两层的老路上来了,有多少客户端就会建立多少个连接,那样数据库服务器岂非压力又变得跟两层一样了,会不会我的理解有误,有了解的富翁给讲一下就好了。
而且我有一点不明白的,就是所有的DELPHI自带的例子或者李维书里的例子都把TDATABASE或TADOCON放在远程数据模块里,如果正确应是这样,是否死机的问题就出在这里,到底数据库连接该放在哪里?
-----------------
现在报告哈我们自己摸索的最新情况,没有POOLER,没有改变ADOCON的位置
改变了两个地方
一。参看李维《D5.X分布式多层应用系统篇》P.9-20
<9-4设定NT服务模式的应用程序服务器>这一节内容
所有应用服务器DCOM设置里[身份验证]变为系统账户(只适用于服务)
二。应用服务的线程模型由Apartment 改为Neutral。
就改了这两个地方,现在两天没死机了,但是仍然疑惑中
就一,这个影响有这么大嘛? 既然是身份验证,死机之前可用表明早就通过了身份验证,所以我不认为是这个影响的。
就二,看Neutral说明,This model is only available under COM+. Otherwise, it is mapped to the Apartment model.感觉更寒!
 
后退
顶部