티스토리 뷰

Flame Graph ?

show the CPU time spent in Java methods, system libraries, and the kernel, all in one visualization.

 

해석하기

  • 각 사각형은 stack frame을 나타낸다(즉, 함수).
    • 사각형의 가로(width)는 현재 프로파일에 얼마나 존재하는지(실행되는지)를 나타낸다.
  • Graph
    • x축
      • 왼쪽과 오른쪽 순서는 중요하지 않다. stack은 단순히 알파벳 순서대로 정렬된 것이다.
    • y축
      • stack depth. 함수들간의 호출 depth.
  • Stack의 색상들은 code type에 따라 설정된다.
    • 보통 Java code는 초록색, C++ code는 노란색, System은 빨간색으로 설정된다.
    • 하지만 다른 color scheme이 적용될수도 있으니 참고하자.

 

  • 맨 위에 해당하는 stack들의 edge은 CPU 사용 중인 것을 나타낸다(위 사진참조).
    • 맨 위의 stack의 edge가 길면 길수록 CPU를 많이 사용하고 있다고 보면 된다.

 

  • Flame graph를 아래에서부터 위(bottom-up)로 읽을 수 있는데, 이는 Parent function부터 child function 흐름으로 읽는다고 보면 된다.
  • 위에서부터 아래(top-down)로 읽을 수도 있다. 맨 위의 stack들은 CPU를 사용 중인 것이기에 이를 확인하면서 읽을 수 있다. 위의 stack들로부터 아래로 내려가면 현재 CPU를 사용하는 함수가 어떻게 실행되어왔는지 확인할 수 있다.

 

아래 주소의 Slideshare 자료가 Flame graph를 해석하는 Example들을 제공하고 있는데, 간단해서 처음에 이해하기 좋은 것 같다.

 

Java CPU profiling 방법

유명하게 3가지 방법이 있는데, async-profiler 가 Java에서는 가장 실용적인듯 (IntelliJ에서도 쉽게 사용하도록 제공됨)

1. perf + perf-map-agent + FlameGraph

  • Linux perf tool + Gregg’s FlameGraph를 사용하는 방법
  • 하지만 perf는 Java stack을 direct하게 가져오지 못함. 그렇기에 perf-map-agent 사용이 필요함. (JIT compiled methods에 대해 JVM에서 바로 노출시키지 않기 때문에)
  • JVM에서 XX:+PreserveFramePointer 옵션을 사용하여야 한다.

 

2. eBPF + perf-map-agent + FlameGraph

  • perf tool 대신 eBPF를 사용하는 방법. 이론상 훨씬 비용 오버헤드가 적다고 함.
    • perf는 user space로 많은 data를 file 형태를 통해 push해서 진행하기 때문에 이게 오버헤드가 크다고 함. 반면 eBPF는 map을 사용해서 더 가벼움.

(위) perf 방식, (아래) eBPF 방식

 

3. async-profiler

  • Java를 위한 low overhead sampling profiler open-source.
  • CPU profiling 시에 perf의 AsyncGetCallTrace를 사용해 진행.
    • AsyncGetCallTrace는 lightweight profiling을 지원하는 Internal API. safepoint를 기다리는 것 없이 single thread의 stack을 확인할 수 있음.
  • container 내에서 실행 중에 profiling 가능

 

 

References

Java in Flames

How to Use async-profiler to Profile Non-root Java Process in Contianer

https://www.usenix.org/sites/default/files/conference/protected-files/srecon18americas_slides_goldshtein.pdf

320x100
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함