With 19 heavily loaded tabs, there must be a fair bit going on.
Are there any places where a loop could exist?
E.g. do you use MQTT and subscribe to wildcards & publish to a topic upon some value change in this subscription?
Or perhaps loop back to a dashboard node to update it's status & have passthrough enabled?
Or some other logic that loops back to do a retry on one of your exec nodes?
Lastly, next time it happens, perhaps you could connect a remote terminal & run top
to see what is hogging the CPU (note VNC is quite heavy)