问题的关键所在
proactor我研究了很就,类似的问题也困扰我很久了,它的根本原因在于异步操作上,也就是说,在proactor回调你service_handle之前,handle所用到的内存资源(对象)就已经被释放了,具体到你的程序来看就是,在handle_read和handle_write中都delete了this,这样在端口关闭的时候,如果同时有未完成的read和write事件返回非成功或者transferred == 0,那么你的这个testB对象就会被delete两次,而你testB的析构函数中又访问了成员变量,这样第二次删除的时候就会非法访问。当然你给出的代码不全,TestA和TestB之间的关系还不是太清楚,分析可能还有漏洞,希望大家一起探讨 谢谢,我这个问题解决了!
现在的问题是,如果程序有内存泄露,应该很容易死掉的,可是我的程序不会死掉,一直跑着,会不会是由于accept socket的释放引起的 内存泄露的情况,要具体分析,如果循环运行中产生的数值很小,则程序可能可以运行很长时间,但是一定会耗光系统的资源,造成崩溃或者停止处理,并不会立刻死掉。 最简单的办法就是定期重启程序,进程退出的时候会自动释放所有的资源:0
要找到问题的话,应该加强调试输出,比如给类进行引用计算这类的,看到底那个类的对象导致了
内存的只增不减。也有可能和你前一个问题有关,是否所有的情况都释放了handle对象等等 我现在能想到的就是socket资源没有释放,导致虚拟内存使用逐渐上升,并导致新的socket资源申请就会失败。 用purify 或者 boundschecker 追查,预计很快就找到答案了。 请问有没有purify 或者 boundschecker ,给我传一份啊!谢谢!