您的位置:首页 > 编程语言 > Lua

luabind 和设置1字节对齐导致服务器挂掉

2015-06-04 21:24 351 查看
做c++游戏服务器开发三年了,遇到过各种各样的服务器宕机事件。今天第一次写博客记录一下最近两次宕机问题。

一:luabind导致服务器宕机。游戏中使用lua做脚本,所以luabind作为库感觉很直观也比较方便,但是我们游戏服务器逻辑是多线程的,最近写了一个加载lua模块的类,但是忘记使用线程本地存储,所以导致luabind的object对象成为全局对象,当有多个线程同时调用object导出的lua接口的时候导致服务挂了在luabind库里面。后来将类改为线程本地存储就好了。自己对lua也没有深入研究只是会一点基本,所以推测是luabind或者是lua底层解析器不是线程安全导致的。所以在多线程中使用全局luabind::object需要加锁或者是直接线程本地存储比较好。要不然等到项目上线玩家涌入服务器不断挂了那就悲剧啊。

二:设置1字节内存对齐服务器内存溢出。我们服务器在window下开发调试,但是在linux下运行测试。在策划验收的时候没有发现任何问题,但是代码提交到linux给测试的时候服务器起来之后总是挂了std::map的insert函数中 core文件显示为内存溢出 linux信号11 。百思不得其解。经过不断的回滚代码最后发现将#pragma pack(1)去就好了,其实到最后也不知道是什么问题,用的机子是centos5.6,编译器是gcc4.4 glibc就没有注意看。其实最开始也用了很多std::map都没有问题不知道那次这么就出现问题了。记得当时调试的时候发现map初始化的时候就有几万个对象所以在调用insert函数的时候导致栈空间溢出,结果就是去掉字节对齐问题解决了而且到线上运行正常。所以不知道是glibc,gcc,还是哪里出现了问题。

最后吐槽下c++模板编译的速度真心伤不起,用起来好用但是编译起来真是要人命。我们项目四线程固态硬盘编译要15分钟,本地修改一行代码等编译重启那就是十分钟后了,本人测试过clang编译效率比gcc快而且错误提示比gcc友好很多,可惜项目已经到后期不可能改变。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  服务器 宕机 c++ lua