This generally means that you are I/O bound somewhere.
In your case, it's possible that you have not set the database connection pool to a high enough value, so your application is blocking waiting for database connections to become available.
It's also possible that your application code is doing something that tries to load a significant chunk of the database into memory, perhaps because it's suffering from some form of the "N + 1 SELECT" problem (in my experience one of the top causes of performance problems in enterprise applications).
can you post thread dump of your running server, so we can see where threads are spending their time.
Without that info it is hard to tell why it is not consuming whole cpu power. Probably it is waitng for some IO resource as Stephen pointed out.