in server/src/main/scala/com/twitter/server/handler/HeapResourceHandler.scala [17:46]
def apply(req: Request): Future[Response] = {
if (Heapster.instance.isEmpty)
return newResponse(
status = Status.InternalServerError,
contentType = "text/plain;charset=UTF-8",
content = Buf.Utf8("heapster not loaded!")
)
val heapster = Heapster.instance.get
val uri = Uri.fromRequest(req)
val params = uri.params.foldLeft(Params(10.seconds, 10 << 19, forceGC = true)) {
case (parameters, ("pause", pauseVal)) =>
parameters.copy(pause = pauseVal.toInt.seconds)
case (parameters, ("sample_period", sampleVal)) =>
parameters.copy(samplingPeriod = sampleVal.toInt)
case (parameters, ("force_gc", "no")) =>
parameters.copy(forceGC = false)
case (parameters, ("force_gc", "0")) =>
parameters.copy(forceGC = false)
case (parameters, _) =>
parameters
}
log.info(s"[${req.uri}] collecting heap profile for ${params.pause} seconds")
// Write out the profile verbatim. It's a pprof "raw" profile.
val profile = heapster.profile(params.pause, params.samplingPeriod, params.forceGC)
newResponse(contentType = "pprof/raw", content = Buf.ByteArray.Owned(profile))
}