Java seems to be using a bunch of resources but we have simple site with only a couple of externals.
All it takes is a single infinite loop There's not much to tweak in the server.xml other than thread allocation, and that would only help throughput at high loads, but at the cost of sucking up even more resources. The only real thing you could tweak is the JCS settings, to use up less memory. On a small site, that should hardly be a concern.If your processor use is going through the roof, that's almost always a sign of a misbehaving loop somewhere. If there's nothing obvious in the code, also think about your redirects and rewrites to make sure there isn't an HTTP request loop going on.Worst case scenario, you could use a java profile (there's plenty out there, open source and not), but be aware that it's a very expensive path to go down in terms of the time it takes to get any real paths to resolution out of it... but we've had to go down that road before with LiveSite so I can say it works but it's a last resort.
What is weird is that we have an 8 way processor but the JVM is really only using 1 (from what TOP says). We haven't messed with the threads yet, though we have cranked up the heap memory.
Are you using the bundled Tomcat or your own? The bundled one uses a 32-bit JVM, which has a ~1.8Gb cap on memory in Linux no matter how much you throw at it. It might have processor limitations too; not sure. If your server is that beefy and you really want to be able to handle that much traffic, it would be well worth it to run your container on x64 (assuming your server isn't x86).