背景:
阅读文章

呼叫执行时间过长

[日期:2007-05-06] 来源:  作者: [字体: ]

作者:hxsd  发表时间:2001年7月4日 07:11
-------------------------------------------------------------------------------
log如下:
object /adm/daemons/convertd: eval_cost too big 1000000

执行时段错误:*Too long evaluation. Execution aborted.

程式:adm/daemons/convertd.c 第 171 行
呼叫来自:feature/command.c 的 command_hook() 第 66 行,物件: clone/user/user#35470 ("香蕉(banana)")
呼叫来自:cmds/skill/exert.c 的 main() 第 30 行,物件: cmds/skill/exert ("0(0)")
呼叫来自:adm/single/simul_efun.c 的 notify_fail() 第 126 行,物件: adm/single/simul_efun ("0(0)")
呼叫来自:adm/daemons/convertd.c 的 output() 第 171 行,物件: adm/daemons/convertd ("0(0)")
object /adm/daemons/securd: eval_cost too big 1000000

还有大量的类似的log
此类问题,只有在晚上玩家挂,大量机器人时才可能出现,白天没机器人时根本不
会出现。。。。


作者:llm  发表时间:2001年7月4日 08:51
-------------------------------------------------------------------------------
Too long evaluation. Execution aborted这类的错误有两个解决办法,
一是如果你的主机性能及网络带宽足够好的话。在MUDOS里的opation文件里,
将各种限制数值调大。调多大我也没经验,可以一步一步放大看看。然后重
新编译再执行。
二如果你的主机不行的话,那么只好限制玩家的一次性指令输入数量。具体
可以在/feature/command.c里面做。

作者:darks  发表时间:2001年7月4日 11:11
-------------------------------------------------------------------------------
*Too long evaluation. Execution aborted.
这个问题一般出现在函数或者呼叫执行时间过长,这里就要注意算法,尽量保证不要再一次调用或者呼叫中使用太
多的循环,可以考虑分步执行的方式来避免。
比如先用一个函数 来执行一部分功能 然后结束这次呼叫
然后再调用一个呼叫 继续执行。 有点类似INPUT_TO的做法 不过具体做起来 可不要使用
input_to  :)
有时候 交给物件自己呼叫也是一个可行的办法。这个时候,初始的呼叫可以停止。而让物
件自身继续这个过程。

作者:hxsd  发表时间:2001年7月4日 11:37
-------------------------------------------------------------------------------
    上面的原因我也知道。。
    hammer2 darks..
    但这样的程序太多了,我不可能一个一个的改吧....
    我想找个办法,在底层上做点限制或别的什么,就能解决这个问题....
    有没有高招啊...
    希望darks,高人出点高招吧....
    如果要一个一个改的话,希望darks,来帮我一起改几天吧,我估计有
一半的cmds,和几百个room要重做....
有没有办法在底层上做一点if,或别的什么解决以上二个问题啊....

作者:jackyboy  发表时间:2001年7月4日 21:20
-------------------------------------------------------------------------------
从你描述的情况看,应该是玩家的机器人大量挂机导致系统变慢,处理命令效率降低后无法在规定时间内完成呼叫
而产生的。darks,llm这点说的很清楚了。

所以可以用几个办法使这种错误不再出现:
1、增加一次呼叫的超时控制,可以去修改mudos的配置文件config,在文件里寻找这样的字样:maximum evaluation
cost : 1000000
然后把具体的数值修改一下就行,当然,直接修改MUDOS也是方法之一,而且肯定奏效。
2、第一个方法只是一种迫不得已的办法,最根本的原因是要降低系统负荷。挂机是最应该被限制的行为了。那是一
种自私的,毫不顾忌抢掠的手段。:)所以至少应该在/feature/alias.c里对输入命令速度进行控制。比如用计时
和计数方式来限制一秒内可以执行命令次数,超过的一律抛掉。这样就应该能减少大部分的错误了吧。系统负担也
应该边小了一些。


尊重作者 转载请注明出处52mud.com

收藏 推荐 打印 | 录入:sbso | 阅读:
相关内容      
本文评论   [发表评论]   全部评论 (0)
内容推送
52mud提供
一起回忆泥巴游戏QQ群68186072
52mud官方微信公众平台
热门评论