JVM
https://www.youtube.com/watch?v=10L-7fb4SWk
What is Continuous Profiling
in production
vs offline profiling
Instrumentation vs Sampling
100 Hz & 10 us/capture = 1% overhead
What is a flame graph
Basic features
CPU profiling
いつもの
Off-CPU profliing
Blocking I/O とかのこと
syscall とかも
Analytical
Trace
per-req で "trace ID" を発行してる?
https://scrapbox.io/files/65d86ea1529aee00251a94d8.png
orange が cpu, blue が waiting for lock
What primitives do we need
https://scrapbox.io/files/65d86f0a5f206500241e6c86.png
Stack unwinding
Sample scheduling
Label samples with context
The JVM is a managed runtime
分かる〜
分かりすぎ
Virtual threads have virtual stacks
super わかりすぎ
JMX は Continuous Profiler では使われてない(そうなんだ)
JFR
Execution sample
RUNNABLE なスレッドの状態を記録するらしい?
Blocked ではない5スレッドの状態を抜いてきて、次の未観測のスレッドにポインタを動かすらしい
Off-CPU support が少し貧弱
no wall-clock
でも GC, JIT compiliation, ... とかの情報は分かる
JVMTI
JVMTI::GetStackTrace (C++)
safepoint まで来ないと観測できないらしい (Ruby の postponed job みたいなものだろうか)
AsyncGetCallTrace
"the base of all serious profilers in Java land"
Datadog は async-profiler ベース
Continuous profiler として重要な要素を語ってるのかな (profiling ctx とか)
CPU profiler
OS assisted CPU sampling (based on perf)
Wall clock profiler