icer 发表于 2009-1-20 00:55:32

堆栈溢出导致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解决这个问题。堆栈溢出的原因可能是物品增加、函数复杂所导致的需要的堆栈空间也更大了。其实经过持续的观察发现堆栈一直也就在原来的极限值附近转悠,有时候几天也不超限,有时一天就超出了。
特此记录,以后出现类似问题可以作为参考。

skywolf 发表于 2009-1-20 01:04:13

zeze。。。

becool 发表于 2009-1-20 04:50:03

原来是这样。
完全看不懂。

hackyfrank 发表于 2009-1-20 04:58:02

还是不懂

jason 发表于 2009-1-20 08:24:15

哈哈,换了linux就是好,就是好啊,就是好!以后北侠一个月重启一次!

maper 发表于 2009-1-20 08:33:31

那岂不是不能当机发丸子了?ttk_01

tomliu 发表于 2009-1-20 09:51:37

靠,好深奥啊!wiz万岁!真用心啊!

pawpaw 发表于 2009-1-20 10:25:46

一个字:牛……
这样的原因也查得出来……
换成是我,如果没有仿真器,那是搞不定的……

sure 发表于 2009-1-20 10:38:08

既然系统正常了,那么强烈建议取消私人房间内柜子的getout busy!!!!!

icer 发表于 2009-1-20 10:52:58

你不看news的啊
Whuan更新
取消新房getout物品的busy
rt
页: [1] 2
查看完整版本: 堆栈溢出导致Mud宕机原因总结