I've found that utilization and consensus weight of relays is highly variable, and the causes aren't always easy to pin down. There are a lot of factors that can contribute. A few off the top of my head:
- CPU performance. AES-NI helps here. It seems unlikely this is your issue if your CPU utilization is only half.
- If using a VPS, the behavior of other VMs using the same underlying hardware can be a big factor.
- Bandwidth authorities connectivity to your relay has an impact. Is some peering point between a bandwidth authority and your node over-subscribed?
Some of this is out of your control and hard to predict ahead of time. When I want to add another relay to the network, I've found it useful to bring up a bunch of relays at once, measure the performance of each, and then keep the best performing relay. Automation (I use Ansible) helps with this.