北大侠客行MUD论坛's Archiver

icer 发表于 2009-1-20 12:55 AM

堆栈溢出导致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 AM

zeze。。。

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

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

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

还是不懂

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

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

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

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

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

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

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

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

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

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

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

你不看news的啊
[2009-01-19 21:38:22] Whuan更新
取消新房getout物品的busy
rt

zgbl 发表于 2009-1-20 01:43 PM

只看懂了“堆栈”两个字……汗,计算机才刚学了入门,看来还要努力啊

whuan 发表于 2009-1-20 02:09 PM

我也没看懂....

有icer在,也不需要我费心这类问题...

sure 发表于 2009-1-20 02:47 PM

你漫不经心的关上柜门,结果一不小心手指被柜门夹到了,你疼得“嗷”的叫一声。

看来要重启才行。。。。。。。我忍!!!

yaoguai 发表于 2009-3-27 02:29 PM

mudos里面有heap的概念瓦?
这里的stack主要用来放啥的?

jason 发表于 2009-3-27 03:54 PM

各种运行时对象都在stack里

ssslucky 发表于 2009-3-31 03:28 PM

yaoguai 发表于 2010-3-12 04:11 AM

看到这个
我忽然想到
是不是有人在function的param里面放了大obj?
特别是递归的param.........

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.