Quadcopter Balancing with PID algorithm
Lots of oscillation is usually a clue that Kp is set too large.  Try reducing it.  More generally, you should be able to find good K values by following a tuning algorithm. There are quite a few, but the Ziegler–Nichols method is a popular choice.

One PID loop per axis should be enough, if it updates fast enough and is properly tuned.