Advice needed for complex setup

Splitting up load between multiple hubs is certainly a way to help reduce load if that is truly were the problem is. Generally from what I have seen it looks like Zigbee and Zwave devices tend to be fairly lean if they are using built it drivers though.

I think i would start with loading the Hub Info driver by thebearmay

Then have that data captured and either graphed by Webcore with Hubigraphs, or InfluxDB Logger to a local/cloud Influxdb with grafana providing the visualization. To show something like this.

That will atleast let you know for sure if there is any CPU issue as well or just memory. and how well overall the device is running.

When you setup the HubInfo driver make sure you only enable the collections you need on reasonable intervals for what you need. It isn't to heavy but isn't without cost by itself.

If you really only have Zigbee and virtual devices then I would be surprised if memory consumption is related to the devices themselves. I would start to look at your rules in RM or other Apps. I would start to look at the rules and see if there are any that can be optimized.

Regardless of that, splitting the load between hubs may not be a bad idea to help split the work. Hub Mesh works great,

One thing to consider when migrating or moving to a C8 is that there are some Zigbee devices that are problematic with the Zigbee 3.0 radio in it. You may want to do a little bit of research to find out if you have any such devices.