首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++写的服务端为啥过几天会自己挂掉?

2012-09-20 
C++写的服务端为什么过几天会自己挂掉??在Windows下面用C++写了个服务端,如果有链接就处理,没有链接,就卡

C++写的服务端为什么过几天会自己挂掉??
在Windows下面用C++写了个服务端,如果有链接就处理,没有链接,就卡在accept处等待连接(不需要用select功能)。
现在问题是过几天之后:服务端会出错,提示错误,要不要发送。不知道什么原因呀。。
去网上查了一下,可能是下面两种情况:
1)接收端buffer满了,没有清理,导致出错、、
2)没有与服务端的心跳连接,导致错误、、

不知道啥原因啊、、如何去解决呢??很纠结、、、

[解决办法]
1:新来用户,建立连接,该用户离开时未对资源进行回收,造成内存越占越大最终崩溃
2:未对用户离线做足准备,用户离线,服务端不知,造成资源未释放,发心跳包是一种适宜的方法
[解决办法]
在你的程序中多添加写异常处理的代码,多判断函数调用的返回值,错误的时候,把errno给打印出来。
还有,最重要的是多打些日志出来,方便你定位问题。
[解决办法]

探讨

引用:
是多进程还是多线程处理?用完的资源是否释放?

多线程处理的、、用完的资源在线程里面都释放了的已经、、
有没有可能接受Buffer没有清空的原因呢???

[解决办法]
进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈,内容为从上到下列出对应从里层到外层的函数调用历史。

Windows下检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!

[解决办法]
比较可能原因:
1.内存泄露。
2.资源泄露,例如socket。

定位建议:
查看挂掉的现场环境。
模拟一定量的客户端跑一段时间查看内存使用。
多加日志记录出错情况。

具体情况不清~木有办法。

热点排行