Always Configure the Distributed Garbage Collector
By default, a lease should last 10 minutes, and clients should renew every 5 minutes (clients attempt to renew when a lease is halfway expired). The problem is that, in a wide variety of production scenarios, the default values don’t work very well. Using JDK 1.3, I’ve experienced intermittent distributed garbage-collection failures (in which a client has a stub to a server that’s been garbage-collected) when the network is congested or starts losing packets.
Fortunately, you can change the duration of a lease by setting the
value of java.rmi.dgc.leaseValue. This parameter,
which is set on the server, specifies the duration of a typical
lease. The trade-off is simple: smaller values for
java.rmi.dgc.leaseValue mean shorter lease
durations, and hence quicker notification when a server becomes
unreferenced.
But smaller values also mean a greater chance of a false positive: if
a client has trouble renewing a lease, giving the client a larger
window in which to renew the lease (for example, before the
client’s lease is expired and
unreferenced is called) is often helpful. In
particular, larger values of
java.rmi.dgc.leaseValue will make your system more
robust when the network is flaky. I tend to use at least 30 minutes
for java.rmi.dgc.leaseValue.
Tip
You might also think that longer leases result in less network traffic (because there are fewer renewals). This is true, but the amount of bandwidth you save is so small that it’s really ...