This is from a posting on river-users. The issue is being filed in response to that thread.
I am seeing what would appear to be one DGC thread allocated per exported object. This is using River 2.2 and Sun JDK 1.6.0_17. Relevant configuration parameters are below.
I am observing problems with the DGC threads not being retired on a timely basis. The exported objects are proxies for Futures which are being executed on the service. The code pattern is such that the proxied Future goes out of lexical scope quite quickly. E.g., rmiCallReturningProxyForFuture().get().
Under a modest load, a large number of such Futures are exported which results in a large number of long lived DGC threads. This turns into a problem for the JVM due to the stack allocation per thread. Presumably this is not good for other reasons as well (e.g., scheduling).
I have tried to override the leaseValue and checkInterval defaults per the configuration options below. I suspect that the lease interval is somehow not being obeyed, which is presumably a problem on my end. However, I can verify that the configuration values are in fact showing up in System.getProperties() for at least some of the JVMs involved (the one which drives the workload and the one that I am monitoring with the large number of DGC lease threads).