关于内存越界的问题

      在上家公司的时候,服务器出了一个很郁闷的问题,做压力测试的时候,一旦人数上到1000多的时候,会不定时的出现崩溃现象,虽然崩溃的地方相同,但是和崩溃的起始点已经相差很远,gdb的断点基本上用处不大。

      后来在网上查了许多资料,基本上定位是内存地址越界引起,只是不知道具体的越界地点。

      当时我做的第一个措施是把所有的sprintf、memcpy,strcpy等相关容易出现内存地址越界的函数都检查了一遍,都加了防御代码,不过遗憾的是问题不是出在这些地方。崩溃问题依旧。

      分析代码尝试解决失败,只能依赖工具,尝试了valgrind等几乎所有linux下的内存检查工具,但是这些工具都有一个致命的缺陷,我们的服务器程序太臃肿了,跑起来非常卡,连正常启动加载运行时10秒就能完成的任务,用这些工具都需要20分钟以上。更不用说使用压测工具跑机器人了。我尝试了一周左右,一直未能找到问题,后来觉得这种方案不太靠谱,就放弃了,一直使用分析代码的方式。直到离职前也未能解决,比较遗憾。

       前不久,听说上家公司的技术总监解决了这个问题,打听了一下,原来出现问题的地方非常简单,如下:

//关闭战斗
g_fightMgr->closeFight(m_fight);
m_fight = NULL;

我们的游戏是回合制,战斗后台使用的是状态机来实现的,上面的代码是最后一个状态中关闭战斗的语句,在closeFight里面会将所有的状态delete掉,包括这段代码所在的状态,然后后面的给m_fight赋值为NULL就造成了非法写内存。解决的方案把最后一句删掉或者放到closeFight前面即可。

      问了一下如何发现这个问题,其实也是不停的跑valgrind,跑了一个月,跑到吐最后才发现了问题。

      通过这件事情,我总结一下,在解决linux崩溃这些疑难杂症上,必须分析代码+使用工具,代码分析是我的强项,但是使用工具这方面我还有待加强,而且不能急躁,要多一点耐心,多一点坚持,问题一定能解决。我缺乏的就是耐心好持久。最后我还是比较欣慰,我离开上家公司唯一的遗憾总算是解决了,祝以前的小伙伴们好运!也为自己提了个醒,以后遇到类似的问题要做到更好。谨以此记。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏即时通讯技术

移动端IM开发者必读(二):史上最全移动弱网络优化方法总结

本系列文章引用了腾讯技术专家樊华恒《海量之道系列文章之弱联网优化 gad.qq.com/article/detail/29546》的章节,感谢原作者。

32130
来自专栏牛客网

腾讯一面应用开发

最遗憾的,叫写冒泡排序都能写数组溢出,非科班面对算法题真的紧张。凉凉。 面试官是做php的,我用java。 问了http和https的区别。 答: 后者是前者的...

30460
来自专栏大宽宽的碎碎念

如何深入理解开源项目从小代码集看起聚焦请先看文档关注资源的生命周期找一个好工具建立调试环境看代码很累,要坚持

34660
来自专栏老马寒门IT

第一章:NodeJS 概述

Node 概述 什么是 Node Node.js® is a JavaScript runtime built on Chrome's V8 JavaScrip...

45390
来自专栏码生

HHKB 键盘 使用攻略 && Karabiner

简单介绍下这个软件,主要是用来自定义按键的map,也即是键盘按键的替换,相信大家应该明白什么意思。

1.2K20
来自专栏程序生活

Python爬虫系列(一)初期学习爬虫的拾遗与总结(11.4更)

---- 最近,为了提取裁判文书网的有关信息,自己迈入Python的学习之路,写了快两周的代码,自己写这篇文章总结下踩过的坑,还有遇到一些好的资料和博客等总结下...

42150
来自专栏我是攻城师

程序员最恐怖的梦魇是什么?

26840
来自专栏北京马哥教育

高性能服务器架构里的隐藏秘密

作者:Coder李海波 来源:http://blog.csdn.net/marising/article/details/5186643 在提到服务器架构时,...

36640
来自专栏腾讯技术工程官方号的专栏

大道至简—GO语言最佳实践

被称为GO语言之父的Rob Pike说,你是否同意GO语言,取决于你是认可少就是多,还是少就是少。

3.1K120
来自专栏iOS122-移动混合开发研究院

记一个同时支持模糊匹配和静态推导的Atom语法补全插件的开发过程: 序

简介 过去的一周,都睡的很晚,终于做出了Atom上的APICloud语法提示与补全插件:apicloud_autocomplete.个中滋味,感觉还是有必要记录...

20160

扫码关注云+社区

领取腾讯云代金券