Virtualization is a powerful technology that facilitates better use of the available data center resources using a technique called Virtual Machine (VM) consolidation which involves gathering of several virtual machines into a single physical server. To address the problem of high energy usage, it is necessary to eliminate inefficiencies and waste in the way electricity is delivered to computing resources, and in the way these resources are utilized to serve application workloads. This can be done by improving the physical infrastructure of data centers as well as resource allocation and management algorithms. VM consolidation involves live migration, which is the capability of transferring a VM between physical servers with a close to zero down time is an effective way to improve the utilization of resources and energy efficiency in cloud data centers. VM placement and VM migration act as a backbone to the VM consolidation process. Issues such as heterogeneity and scalability of physical resources, volatile workloads and migration cost make the VM consolidation process difficult. This paper presents a comprehensive survey of different VM consolidation challenges such as host underload detection, host overload detection, VM selection, VM live migration and VM placement algorithms. The paper discusses these VM consolidation challenges and presents a comparison between different state-of-the-art VM consolidations algorithms.