The power consumption of data centers and cloud systems have increased almost three times between 2007 and 2012. Over-provisioning techniques are typically used for meeting the peak workloads. In this paper we present an autonomic power and performance management method for cloud systems in order to dynamically match the application requirements with 'just-enough' system resources at runtime that lead to significant power reduction while meeting the quality of service requirements of the cloud applications. Our solution offers the following capabilities: 1) real-time monitoring of the cloud resources and workload behavior running on virtual machines (VMs), 2) determine the current operating point of both workloads and the VMs running these workloads, 3) characterize workload behavior and predict the next operating point for the VMs, 4) dynamically manage the VM resources (scaling up and down the number of cores, CPU frequency, and memory amount) at run time, and 5) assign available cloud resources that can guarantee optimal power consumption without sacrificing the QoS requirements of cloud workloads. We validate the performance of our approach using the RUB is benchmark, an auction model emulating eBay transactions that generates a wide range of workloads (such as browsing and bidding with different number of clients). Our experimental results show that our approach can lead to reduction in power consumption up to 87% when compared to the static resource allocation strategy, 72% compared to adaptive frequency scaling strategy and 66% compared to a similar multi-resource management strategy.