1. A method of optimizing traffic in a communications network, the method comprising: monitoring traffic communicated by a plurality of Virtual Machines (VMs) over one or more paths through the network, each path comprised of one or more constituent links; generating a set of candidate VM sites, each candidate VM site comprising an unused VM site in the network; generating a set of congested VMs from the plurality of VMs in the network, wherein each congested VM is determined to be communicating with at least one other VM over a path having at least one congested link; ranking the congested VMs based on one or more predefined criteria; and modeling the migration of one or more congested VMs to one or more candidate VM sites to: determine a minimum number of congested VMs to migrate to corresponding candidate VM sites to optimize the traffic through the network; and identify which congested VMs to migrate to which candidate VM sites.