1. A computer-implemented method comprising: obtaining a series of thread dump samples by generating a separate thread dump during each particular time interval in a series of time intervals; generating a set of stack segment classifications based on the series of thread dump samples, wherein generating the set of stack segment classifications comprises; identifying a first set of stack frames within a first stack segment each of the first set of stack frames having a corresponding intensity value; determining that the corresponding intensities of the first set of stack frames within the first stack segment diverge over time beyond a specified threshold; splitting the first stack segment into multiple constituent stack segments, based on the determination that the corresponding intensities of the first set of stack frames within the first stack segment diverge over time beyond the specified threshold; and generating a new stack segment classification for each of the multiple constituent stack segments; for each particular thread represented in the series of thread dump samples, selecting, from the set of stack segment classifications, a particular stack segment classification for the particular thread based at least in part on a number of invocations of a code block in the particular stack segment multiplied by an execution time of the code block; determining a trend for each stack segment classification in the set of stack segment classifications, thereby generating a set of trends; determining a set of anomalies based at least in part on the set of trends; and generating output based at least in part on the set of anomalies; wherein said set of anomalies includes at least one of: a level spike, a level shift, a level drift, a variance change, a saturation, a stuck thread, a lingering thread, a deadlock condition, a congestion upstream, a congestion downstream, a congestion in resource pool, a convoy effect, an impedance mismatch, an outlying measurement, or a burst of outlying measurements.