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