1. A computer-implemented method executed by at least one processor for running a streaming application, the method comprising: deploying a streaming application that comprises a flow graph that includes a plurality of operators that process a plurality of data tuples on at least one virtual machine (VM); defining a plurality of performance thresholds for the plurality of operators in the flow graph; monitoring performance of the streaming application; when performance of a first portion of the streaming application in a selected VM does not satisfy at least one of the plurality of performance thresholds, determining when the first portion of the streaming application in the selected VM is underperforming, and when the first portion of the streaming application in the selected VM is underperforming, splitting the first portion of the streaming application in the selected VM into second and third portions of the streaming application that are deployed to a plurality of VMs; and continuously monitoring performance of all portions of the flow graph and dynamically changing allocation of portions of the flow graph that are underperforming by splitting at least one portion of the flow graph to different VMs and changing allocation of portions of the flow graph that are overperforming by coalescing at least one portion of the flow graph to a single VM.