First of all, rest assured that there doesn't seem to be any hardware or O.S. problem: your graphic shows the system is properly acknowledging the presence of 8 available CPUs; thus, there's nothing to be tweaked in the BIOS or in the Linux kernel.
As for the possible reasons your applications aren't making full use of all your CPU power, they are basically three:
- Your current workload just doesn't need so much power.
- Your applications don't allow much (if any) parallelization.
- Your servers (MySQL and Apache) are configured to only make use of single CPUs.
The third option is the most implausible, because by default MySQL and Apache are totally happy to go multithread, if they can; so let's focus on the other two ones.
How's the server's response time under the current load? Does it feel "slow", or does it answer promptly? To rule this out, can you run benchmark tests to put more load on your server? If CPU usage goes up under a heavier load, then your server is doing fine, it just doesn't currently need so much CPU power. But if it doesn't and the server starts answering poorly (or if it already is doing that), then you should have a look at option 2.
Regarding that: Apache is inherently parallel, as it "just" processes and serves web pages; so the culprit could be MySQL. What sort of queries are your running against it? Are you just doing SELECTs, or are you (perhaps heavily) INSERTing, UPDATing or DELETing data? Also, what kind of transactions and locks are you using? Depending on all of this, it may very well be that queries are just being executed serially, because the server can't properly parallelize them. Also, the same thing could happen because MySQL is waiting for disk I/O or because it doesn't have enough memory available. You should run some profiling tool against your MySQL and see what it has to say about this.