![]() |
![]() |
#1 |
高级会员
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 21
声望:
50
![]() 现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
呼叫执行时间过长
作者: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里对输入命令速度进行控制。比如用计时 和计数方式来限制一秒内可以执行命令次数,超过的一律抛掉。这样就应该能减少大部分的错误了吧。系统负担也 应该边小了一些。 --以上转载自www.niub.net之mud制作论坛 |
![]() |
![]() |