1. A method comprising: receiving one or more performance measurements for a plurality of multithreaded applications, each multithreaded application comprising a plurality of independently executable tasks, each task comprising a plurality of threads and each thread using one or more resources, and one or more utilization measurements for the resources used by the threads of the plurality of multithreaded applications, wherein the received performance measurements comprise processing times for the plurality of multithreaded applications and the processing times for the threads of the applications; determining that a processing time of a first application of the plurality of multithreaded applications does not meet a first performance target; determining that a first thread of the first application needs a disproportional amount of processing time; determining that a first resource used by the first thread is overutilized; determining a second thread that uses the first resource, wherein the first thread and the second thread belong to different tasks; and in response to determining the second thread, throttling the second thread by adjusting a priority of the second thread.