Take regular thread dumps (around 3 with an interval of around 5 seconds between each) when this high CPU usage occurs and attach them here. They should tell us what's going on during that time. For taking thread dumps you can use the jstack command that comes with Java runtime or any other method as explained here ThreadDump
I have captured the thread dumps, please find them in the following location.
Kindly have a look, it would be great if you could provide some suggestions on what can be done further..