As we discussed in chat, the big thing you need to do is try and capture what is going on during the spike with the “show processlist” and “show engine innodb status \G” commands. Chances are there is a query or queries that are locking up some key tables and causing other threads to wait which will cause churn on your system.
You said your CPU was around 25-35%, which is not too bad actually. And we verified that your system was not using any swap memory, which is also good. Some additional metrics that will be nice to gather during the spike for reference are the system load and the IOWAIT%. You can get those through the below commands:
“uptime” (for system load)
“sar 5 5” (for IOWAIT%)
Let me know once you are able to capture the data and we can look into it some more.