有一种情况下,connection对象无法被释放

0

首先我怎么确定不是我的业务代码问题:
就是我的业务代码里,没有做任何对这个connection对象的引用。为了确认100%没有做引用,我特意为某个连接做了特殊处理,就是基本上没有业务代码。


什么情况下无法被释放:我做的是HTTP服务,就是在客户端浏览器连接上服务器,但是还没有收到响应,就主动的关闭了连接的情况下。
这时候服务端的这个connection对象,就无法被正常释放回收。


我专门研究了,onClose事件会触发,destroy方法也会被执行,但是destruct方法无法被触发。


我打印了一下堆栈。大概是:
baseRead方法里面有一个代码发现到客户端的连接已经关闭,然后就主动的执行了destroy方法,似乎是试图关闭连接。但是结果是这个连接不能被正常释放。

已邀请:

walkor

赞同来自:

应该是php还没来得及回收它。执行 gc_collect_cycles(); 可以触发回收。后面我看下怎么优化下。

phphand

赞同来自:

我个人认为可能是这种情况下,connection的socket对象没有被正常释放,导致连带connection对象无法回收。

要回复问题请先登录注册