Tim Peierls wrote:
> What was the date of that snapshot? It looks like there's a fix as of
> June 11, revision 6696 in svn.
Not sure about the date, it's the snapshot, available in the maven
repository, 
http://maven.restlet.org/org/restlet/jee/org.restlet/2.0-SNAPSHOT/org.restlet-2.0-SNAPSHOT.pom


I would actually prefer a configurable ClientResource, to be able to
switch on/off launching separate threads - does this already exist?

Best regards,
Nina
>
> But (talking to Jerome and Thierry now) I'm a little worried that this
> fix isn't really addressing the heart of the problem. In particular,
> the use of thread pool per BaseHelper instance prevents efficient
> re-use of threads in the JVM. 
>
> Also, defaulting coreThreads=1 and maxThreads=255 with a
> SynchronousQueue seems like it's asking for trouble with CPU count <<
> 255. What about a bounded queue with high capacity to get through the
> bursts, but keep the pool size to some small multiple of the CPU
> count? Remember that core size is _not_ really min size.
>
> (And a minor nit: BaseHelper.workerService is a volatile instance
> field, so visibility isn't problem, but there are some atomicity
> issues -- at init time and shutdown time. Fix to the latter just means
> copying volatile value to local variable before testing and using.
> Fixing former ... needs some thought. Maybe it's OK as is.)
>
> --tim
>
> On Tue, Jun 22, 2010 at 6:02 AM, Nina Jeliazkova <n...@acad.bg
> <mailto:n...@acad.bg>> wrote:
>
>     Hello All,
>
>     I am experiencing memory/thread leak ,with Restlet-2.0-RC4 and
>     Restlet-2.0-SNAPSHOT , when using ClientResource . Basically,
>     ClientResource doesn't close the thread it spawns and this result
>     in number of inactive threads and  severe memory leak.
>
>     Here is some very simple code to illustrate this behaviour.  The
>     same code runs fine in Restlet-2.0-M6 (which doesn't span new
>     thread in ClientResource).
>
>         public void run(int instances) throws Exception {       
>            
>             for (int i=0; i < instances;i++) {
>                 ClientResource clientResource = null;
>                 Representation r = null;
>                 try {
>                     clientResource = new
>     ClientResource("http://restlet.org"; <http://restlet.org>);
>                     r = clientResource.get();
>                 } finally {
>                     try { r.release(); } catch (Exception x) {}
>                     try { clientResource.release(); } catch (Exception
>     x) {}
>                 }
>             }
>         }
>        
>         public static void main(String[] args) throws Exception {
>             ThreadTest test = new ThreadTest();
>             test.run(1000);
>         }
>
>
>     I guess there might be something missing in the code to explicitly
>     close threads, but since the same code runs fine in M6, it is
>     quite confusing to experience leaks after upgrade.
>
>     Best regards,
>     Nina Jeliazkova
>
>     P.S. Inactive threads while executing the example above
>
>
>

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2625730

Reply via email to