If I understand your question correctly, you are building and applying the shadow maps at the same time. You really do not want to do that.
If you are smart about this, you can vary the frequency of shadow map updates and save massive amounts of memory bandwidth necessary to actually fill the shadow maps (e.g. if nothing in the world moves inside the light volume and the light doesn't move, then there is no need to recompute the shadow map). I have gone as far as to determine which of the individual faces in a shadow cubemap need to be recalculated - a lot of work to implement, but worth it.
Another thing to consider is that you do not actually have to update shadow maps every frame. Surprisingly, for distant light sources or a reasonably small number of nearby light sources you can get away with updating at 1/2 or lower render frequency without the end-user noticing. I have used this to great success in my own work, on lower-end GPUs I update half of the shadow maps every frame (so a full update takes 2 frames) and very few people ever notice ;)
In short, consider implementing some logic that allows you to update the shadow maps periodically instead of every frame. Performance should improve drastically.