[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ecf-dev] ECF remote services leaking threads

Hi Scott, 

Are you familiar with using YourKit?  If so, I could send you the snapshot I just captured.  I'm using 9.5.0 which is early access and does not require a license.  If not, I'll try to extract the requested info into an email.  If you would like the snapshot, ping me on skype:  bryanhunttx

Bryan

On Oct 15, 2010, at 10:47 AM, Scott Lewis wrote:

> Hi Bryan,
> 
> On 10/15/2010 7:53 AM, Bryan Hunt wrote:
>> I think ECF is leaking threads under certain conditions when it discovers a remote service.  It appears that when a service is discovered, ECF creates an IRemoteServiceContainerAdapter:run thread, a RSRegistry Dispatcher thread, and three tcp threads: ping, rcv, and sndr.  As you have seen, I'm seeing problems with zookeeper undiscovering / discovering services when there appear to be network / process delays.  It is during this time that ECF creates and additional IRemoteServiceContainerAdapter:run thread, a RSRegistry Dispatcher thread, and three tcp threads.
> 
> These threads are all correct...i.e. needed for the transport/keepAlive (sdr, rcv, ping). The IRemoteServiceContainerAdapter is for receiving the remote service registry messages, and the dispatcher for running invocations of remote calls.
> 
> Note that the IRemoteServiceContainerAdapter thread and the dispatcher won't be shut down until the container is disposed.
> 
>> Since the zookeeper discovery continues to have issues, these threads keep being created.
> 
> Yes, as new remote services are discovered, new containers with connections are formed and registry and registry dispatchers created for those remote services.
> 
> The main question WRT the possibility of leaking threads is:  what happens when remote services are unregistered and undiscovered?
> It sounds like zookeeper discovery is having some strangeness WRT undiscovering remote services...so I would expect that this could result in some problems...but also realize that the unregistration of a remote service host will not *disconnect* the containers...because their may be other remote services exposed via that same container (or even by the other side).
> 
> How the containers/connections are managed/disconnected/disposed isn't at all specified by OSGi remote services...but ECF exposes the IContainer interface to allow/support control over that.  But the answer to whether threads are being leaked is dependent upon the use case...i.e. when (for the host and client/consumer) should everything be torn down?
> 
> Could you describe the host/client structure a little further...and the sequence of remote service registration and discovery...followed by use, unregistration/undiscovery?  And if you have thread listings at some or all of these steps then we can check for leaking threads.
> 
> Thanks,
> 
> Scott
> 
> _______________________________________________
> ecf-dev mailing list
> ecf-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/ecf-dev