Advanced control and optimization techniques offer a theoretically sound basis to enable self-managing behavior in distributed computing models such as utility computing. To tractably solve the performance management problems of interest, including resource allocation and provisioning in such distributed computing environments, we develop a fully decentralized control framework wherein the optimization problem for the system is first decomposed into sub-problems, and each sub-problem is solved separately by individual controllers to achieve the overall performance objectives. Concepts from optimal control theory are used to implement individual controllers. The proposed framework is highly scalable, naturally tolerates controller failures, and allows for the dynamic addition/removal of controllers during system operation. As a case study, we apply the control framework to minimize the power consumed by a computing cluster subject to a dynamic workload while satisfying the specified quality-of-service goals. Simulations using real-world workload traces show that the proposed technique has very low control overhead, and adapts quickly to both workload variations and controller failures.