Thanks for the reply.

I had already run tests with both speedtest-cli and iperf3. This server consistently achieves 200 to 300 Mb/s in both directions, with both relays still running, and on some runs is hitting over 800 Mb/s.

The BWauth and self-measured bandwidths make no sense to me. Watching arm, the averages are always in the X Mb/s range. I've watched these relays serve 10 - 15 Mb/s each, 20 - 30 Mb/s in parallel, during busy times. Right now one is running 1.6 Mb/s average and the other at 2.5 Mb/s, having started these two arm instances about 2 hours ago. I don't find these numbers to be very impressive given the capacity of the connection, but they're still several orders of magnitude better than the measured bandwidth. I don't understand the discrepancy. 

I'm not using the ISP-provided router. It's not a consumer-grade router either. I hesitate to list the specific model here, but according to its specifications it shouldn't have a problem with the load, and indeed it doesn't appear to be struggling at all.

In terms of optimizing the server, I've followed Moritz's guide. It doesn't appear to be dropping connections. At one point I had 5000+ established connections. The CPU and RAM are getting a work-out for sure, but neither is maxed.

If there's a bottleneck on my side, I'm not sure where it is. What else should I be checking? And why is actual performance in Mb/s so much higher than the measured bandwidth? By the way, where are you finding the historical BWauth and self-measured bandwidths?