我的应用服务器经常会处于龟息状态,检查内存和CPU的使用都很稳定,但是它就是不响应其他的请求,可能要过个十几分钟才行,请大家畅所欲言,讨论一下各种可能的原因。2

to xeen
嘘!!小声点,不要被人听见!我不知道有什么区别,可是我曾经很稳定的运行过
一个多月,五月份才开始出现这个问题
 
某些remote DataModule中与主界面有消息传递(PostMessage方式),
消息的处理比较繁琐,这会不会是原因之一呢?
 
在线程之间采用消息传递据说不是十分可靠的.
 
to siyan:既然不好改了,就不好办了,只有在程序里加入更多的调试代码,记录更多的调试日志,才容易找出错误在哪里。
DCOM由于是进程外组件,在数据交换时是要比进程内组件要复杂很多的,但对开发人员用起来没有多少差别,只是如果过多的与用户界面交互,会更增加内部处理的复杂性。
在微软的新闻组上发贴子也不算厉害啊,谁都可以发的,回贴子解决问题的人才厉害。
 
to Sachow
我实在不知道该如何调试了,因为在客户端只是简单的执行socketconnection.conneted:=true
而有时候程序就停在这个地方,最长的一次达半小时之久才连接上
注:程序等待的时候,scktsvr的客户端连接有该连接信息
会是线程模型的问题,还是我与用户界面交互的问题呢
 
你用回调了吗?
CALLBACK?
为什么老说不让我灌水
 
socketconnection.supportCallback:=true
不过我没有做任何处理,有关系吗?请详细解说一下,我比较菜
我没有不让你灌水啊?不关我事!欢迎灌水
 
可能是有一个存储过程或视图有除零溢出等错误,导致应用服务器停止服务。
检查你的存储过程及数据库的数据吧
 
你没有使用callback.
服务器出现错误会导致RPC不可用的错误,和这个还不一样
 
不懂,但只想问一句,会不会在某个数量的用户登陆后就会出现这种情况,只有一两个用户登陆时不会出现问题吧,不知你向数据库访问是怎样设计的(会不会是用户数呀)
 
to flysand
我没有用存储过程,视图怎么会有除零问题呢?不太明白
而且,我的服务器没有停止服务,只是休息了,休息的具体时间在10~30分钟之间
to bh812
每个remote datamodule一个session,autosessionname:=true ,分流之后每天服务器
的有效连接大概是30个左右,我想不会是这个问题吧,因为系统在四月份时曾很稳定的
运行了一个月,那时只有一台服务器,最高连接数达到60多
 
to menxin
那你还能想到其他可能的原因吗,请多多指教
 
我只能告诉你,应该不是postmessage是问题
 
to menxin
我在消息处理里又创建了其他的com对象来处理业务,这样应该也没关系吧?
 
如果你的线程模型是Apartment Threaded(STA),且客户端不是用多线程的方式进行的调用,那么这个问题也就不会是线程模型的关系。
但如果你的程序里线程和消息循环的关系太复杂,也不好说……
 
我分析主要原因有以下几種可能﹕
1﹕從以上你所說的情況來看﹐不是應用服務器壞了﹐是出現死鎖了﹐因為你沒有用
存儲過程﹐所以我不知你是如何啟動一個事務的﹐是不是在前台啟用的(調用中
間層的一個方法啟動事務呢)﹐這樣作是很容易出現死鎖的。如果前台在啟動一
個事務后而沒有很好的處理異常或其它的不穩定因素﹐沒有ROLLBACK 事務。這樣
會出現長時間等待﹐此外你說到創建了其它的一些對象來處理BUSSINESS﹐總之要
要注意所有啟用事務的地方。不像C﹑S結構﹐前台掉電﹐或關閉后會自動 ROLLBACK。
2﹕你用的是DCOM﹐因此你定要注意網哉的配置﹐以前我們曾發現和你類似的問題﹐結
果是網哉沒有配置好﹐舉個例子﹐有一次我們把一台原本登入到網哉的AppServer登
到本機﹐權限也同樣賦好了﹐結果這樣工作就出現和你所說的一樣情況。有時會出 現等待﹐有時又一點問題都 沒有。
此外我想說的是MIDAS.dll授權問題只是一張証書而已﹐是不會影響程序的。
60個客戶不用走三層吧﹐開發成本太高了。還是習不起ORACLE的lienece?
good luck! ^_^
 
to coolczw
谢谢你能这么详细的说明,只是我在程序里并没有显式的启动事务,我采用的是客户端
用ClientDataSet提交SQL语句的方式获取数据,更新的时候有两种处理方式,一种是
ClientDataSet.ApplyUpdate(0),另外一种就是使用socketconnection.appserver.自定义更新方法(相关参数)的方式,这样的处理有什么需要注意的地方吗
对于你说的第二点,我使用的socket连接方式,根本就没有进行DCOM的配置,那么是否还
存在你所说的问题呢,请指教
另外,使用三层结构是客户要求的,他们当初提这个要求只是不想装那么多的oracle客户端
他们怕麻烦,如此而已
 
没有做过, 提议一个补救方案, 另外做一套监控程序,
客户端超时设置短一点, 超时后启动另外的程序自动通知服务器重启.
 
是不是数据量大了,某个客户正在LOAD大量的数据而导致中间层服务程序不响应新的请求了??
 
to tank007 你说的好像不是很好实现吧,我水平有限,感觉挺难的
to 死灰 我也怀疑是这个问题,我拿几台机做大数据查询时发现速度是有一定的影响
但主要是服务器的内存消耗较大,不知道多点客户并发时会是什么样子
只是,我的系统出现问题时,我查看服务器的CPU和内存使用都很平稳,所以我也就不
能确定,你能说出一些理论依据吗
 
顶部