There are a great deal of factors that can affect upload and download speeds from a dedicated server.
Resource usage: This is typically the most common culprit. Heavy CPU, RAM, or I/O usage can severely limit the transfer speeds that the server is capable of. The easiest way to diagnose this issue is to test within a clean environment, such as a Linux Live CD.
Peering and Congestion: Specific routes may have points of congestion, where the full throughput speed is not available at a specific point along the route between the server and client.
Distance: The further the distance between the client and the server the points of congestion and the higher the latency. Both of these can have a major part in transfer speeds. If there is no congestion along the route, the server OS may not have TCP Windows Scaling enabled.
We recommend not using speedtest.net servers, these are geared toward residential connections and are typically saturated.
In Linux, you can perform the following command to test speeds:
iperf3 -c iperf.he.net -p 5201 -ub 10G
iperf3 -c iperf3.velocityonline.net -p 5201 -ub 10G