Norman,

> > I'm back to running a test.  Started JAMES
> > with -server -Xms128M -Xmx256M -Xrunhprof heap=sites,depth=12

> > If this will just run for 48-72 hours, hopefully I can gather
> > some useful data.

> let us see what the new debugging show us ;-)


So far, I have a working hypothesis, but will continue to monitor the heap.

We may be getting hit by the known-to-be-bad cache inside of InetAddress.
After 12 hours or so, InetAddress cache related objects appear to be in
excess of 20% of heap usage, and increasing.  From where?  It appears to be
a single line in the SMTP handler that was changed in trunk, but not
backported.

  2.3.0:
    remoteHost = socket.getInetAddress().getHostName();

  trunk:
    remoteHost = dnsServer.getHostName(socket.getInetAddress());

The dnsServer call does:

    public String getHostName(InetAddress addr){
        try {
            return org.xbill.DNS.Address.getHostName(addr);
        } catch (UnknownHostException e) {
            return addr.getHostAddress();
        }
    }

which does not use the InetAddress cache.

By the way, a bit of observation regarding garbage collection.  Because of
the memstat instrumentation in RemoteManager, I can make sure to take heap
dumps only and immediately after the JVM does a full GC.   And I can see
that with 1.4.2_09 under load and with heap dumping on, it doesn't appear to
GC at all until it must.  Asking for a GC under load doesn't often provide
one, so it is good to know when one *does* happen.  When I want to dump the
heap, I just keep watching for the full GC, and then I request the dump.

        --- Noel



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to