Alos, the more load you put on the system the more threads that will be used to handle the load. This explains the CPU utilization increase under higher load (or when the number of threads increases). Usually there is a "sweet spot" for the number of threads as compared the to number of CPUs you have. Then there is also processor affinity which can play an importanmt role - somtimes the JVM behaves better if it is limited to 2 or 4 CPU even if you have 8 available.

To reduce CPU utilization, reduce the load! I don't see how you can expect the CPU utilization to go down or remain steady when you add load. (I assume that when you say to added 10 threads to the client that you are using a load testing tool to simulate load and that those ten threads added additonal load on the system.) In all the tests I have done we have constantly increase then load in steps (such as added 10 more simulated users to the load testing tool) and then see what happens at each phase along the way. We usually increase the load until adding more load doesn't yield any more throughput, or even when throughput goes down. That's when we know we have a bottleneck and we hunt it down (and hunting it down takes performance experrts that look at everything from operating system performance data, to database performance data, to JVM performance data, to applicaiton experts that look for hot spots in the application). But trying to keep CPU utilization low while increasing load, and there is no bottleneck yet, is really a waste of time. And at times when the load gets really high and we reach a bottleneck, if it is really just the CPU (that is, not other tuning will work), then we know we have reached the limit on a single machine and will roll in another machine.

I agreed with your comment.But our issue is we are getting high CPU for the minimal load itself. I am getting 78-82 % CPU with 12 threads and 80-85 % with 20 threads.And we supposed to have that much load (Concurrent users) in the production system.