堆栈溢出导致Mud宕机原因总结
北侠大约自04年5月以来就一直有宕机频繁的问题,一般也就能支撑1-2天,3天以上很少见。由于一直在windows下跑,debug.log宕机后被自动重启的mudos所覆盖,很难追查原因。08年底转到linux下后,重新编译了debug版本的mudos,并修改了重启mud的脚本,终于可以保留每次宕机后的debug.log,而且宕机原因也不再是笼统的“FATAL ERROR: Segmentation fault
”了。
于是发现大部分宕机原因是master.c的illegal offset错误。在jason的指导下,通过用gdb调试生成的core,发现真实宕机原因是stack overflow导致的错误,以至于在错误触发master.c的error_handler时,由于堆栈已经溢出,无法正常执行error_handler函数,所以宕机。
最终通过增加mudos中stack的size解决这个问题。堆栈溢出的原因可能是物品增加、函数复杂所导致的需要的堆栈空间也更大了。其实经过持续的观察发现堆栈一直也就在原来的极限值附近转悠,有时候几天也不超限,有时一天就超出了。
特此记录,以后出现类似问题可以作为参考。 zeze。。。 原来是这样。
完全看不懂。 还是不懂 哈哈,换了linux就是好,就是好啊,就是好!以后北侠一个月重启一次! 那岂不是不能当机发丸子了?ttk_01 靠,好深奥啊!wiz万岁!真用心啊! 一个字:牛……
这样的原因也查得出来……
换成是我,如果没有仿真器,那是搞不定的…… 既然系统正常了,那么强烈建议取消私人房间内柜子的getout busy!!!!! 你不看news的啊
[2009-01-19 21:38:22] Whuan更新
取消新房getout物品的busy
rt 只看懂了“堆栈”两个字……汗,计算机才刚学了入门,看来还要努力啊 我也没看懂....
有icer在,也不需要我费心这类问题... 你漫不经心的关上柜门,结果一不小心手指被柜门夹到了,你疼得“嗷”的叫一声。
看来要重启才行。。。。。。。我忍!!! mudos里面有heap的概念瓦?
这里的stack主要用来放啥的? 各种运行时对象都在stack里 晕 看到这个
我忽然想到
是不是有人在function的param里面放了大obj?
特别是递归的param.........
页:
[1]