100分,急!分布式开发中遇到 多CPU 会死机的问题

bamhill 2003-08-18 05:52:13
开发了一个分布式服务器,供客户端连接数据库使用,单CPU没有问题,可上了双CPU 在客户端ConnectToServer时会报内存不能写的错误。是内存分配的问题还是多线程?
我发现会出现线程莫名其妙多请求的现象!
万分感谢

...全文
149 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bamhill 2003-09-03
  • 打赏
  • 举报
回复
:((
真的没人拉:((
rogery 2003-08-29
  • 打赏
  • 举报
回复
分是够了?可是问题却不好解决!

是不是专业服务器?多半是系统资源处理指令与程序设计代码之间不能良好接触
eminena 2003-08-29
  • 打赏
  • 举报
回复
用 3 个或 3 个以上的 CPU吧!
有钱烧!
rogery 2003-08-29
  • 打赏
  • 举报
回复
分是够了?可是问题却不好解决!

是不是专业服务器?多半是系统资源处理指令与程序设计代码之间不能良好接触
bamhill 2003-08-29
  • 打赏
  • 举报
回复
最后一段代码是:
在共享对象lnv_userloginsrv的of_scan 函数代码如下:
Long ll_index, ll_temp
ll_index = il_Usedtail

/* SCAN */
DO WHILE ll_index <> 0
IF is_ul[ll_index].Valid THEN
/* 确定用户相应,否则在用户列表中删除 */
is_ul[ll_index].responds.POST of_IsOnline()
END IF
ll_index = is_ul[ll_index].Prenode
LOOP

RETURN 0

////////////////////////////////////////////////////////////////////

各位帮帮忙吧 我已经焦头烂额拉。。。。。。。
分不够再加呀
bamhill 2003-08-29
  • 打赏
  • 举报
回复
我跟综了一下,发现问题出在我的一个不可视对象的of_scan()函数,我用TIMER事件隔30秒调用一次,判断在线客户是否有效,这个是为了防止客户端非法退出而写的,代码如下:
在RUN的CLICK事件中
inv_pulse = CREATE n_cst_scanpulse
inv_pulse.Start(30)

///////////////////////////////////////////////////////////////////////////////\

在inv_pulse的TIMER中调用OF_SCAN函数,函数代码是
n_cst_userloginsrv lnv_userloginsrv

/* 共享对象引用前验证有效。*/
IF Success! <> SharedObjectGet("userloginsrv", lnv_userloginsrv) THEN
SharedObjectRegister("n_cst_userloginsrv","userloginsrv")
SharedObjectGet("userloginsrv", lnv_userloginsrv)
END IF

IF IsValid( lnv_userloginsrv ) THEN
lnv_userloginsrv.POST of_scan()
END IF

RETURN 0

///////////////////////////////////////////////////////////////////////////////
在共享对象lnv_userloginsrv的of_scan 函数代码如下:
Long ll_index, ll_temp
ll_index = il_Usedtail

/* SCAN */
DO WHILE ll_index <> 0
IF is_ul[ll_index].Valid THEN is_ul[ll_index].responds.POST of_IsOnline()
END IF
ll_index = is_ul[ll_index].Prenode
LOOP

RETURN 0
gzg302 2003-08-26
  • 打赏
  • 举报
回复
学习,帮你顶顶!
bamhill 2003-08-26
  • 打赏
  • 举报
回复
升级PB7不可行呀,客户端是一个项目,都是用6.5开发的,要升级牵涉的内容太多呢
现在有些进展:
If you are running 分布式PB on a multiple processor machine you should bind the process to a given CPU.
所以用了一段API函数(SetProcessAffinityMask),将程序绑定到一个CPU上,现在错误频率减少,单并没有避免!!
在线等!!!
急呀.......
各位帮帮忙呢!
liuwc18 2003-08-25
  • 打赏
  • 举报
回复
学习
bamhill 2003-08-25
  • 打赏
  • 举报
回复
好 我试试
昨天修改了部分代码,将传输对象的监听放到共享对象初始化前面去了,正常情况没问题,只要密码错误退出单CPU都会报内存不能读!
彻底晕!
flyhot 2003-08-20
  • 打赏
  • 举报
回复
up
hexubing 2003-08-20
  • 打赏
  • 举报
回复
升级到pb7试试,虽然有时死机,便重启后就正常啦。
bamhill 2003-08-20
  • 打赏
  • 举报
回复
使用了共享对象
帮帮忙把 不够再加分!
qiyousyc 2003-08-19
  • 打赏
  • 举报
回复
换双cpu后,应该重新装数据库。
先备份,然后装数据库。在导入数据。
bamhill 2003-08-19
  • 打赏
  • 举报
回复
我也觉得可能和负载均衡有关,在服务器端使用的是共享对象。我发现有时候请求的线程数会增加两个,释放却只释放一个!
怎么办呀!....
polugen 2003-08-19
  • 打赏
  • 举报
回复
可能是负载均衡出问题
jdsnhan 2003-08-18
  • 打赏
  • 举报
回复
学习,帮你顶。
bamhill 2003-08-18
  • 打赏
  • 举报
回复
自己UP

忘了说明啦,是使用了一段时间后才会死机....
用的是PB6.5,用Transport传输对象开发的,PB8又不支持winsock开发分布式啦,升级解决吗??

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧