본문으로 건너뛰기

액티브 트랜잭션

진행 중인 트랜잭션을 액티브 트랜잭션이라고 합니다. 액티브 트랜잭션에서 정기적으로 덤프한 스택을 액티브 스택이라 합니다.

노트

와탭 에이전트는 매 10초(옵션 가능)마다 액티브 트랜잭션에 대해서 액티브 스택을 덤프하고 이것을 서버에 전송합니다. active_stack_second=10

컴팩트한 액티브 스택 수집

액티브 스택은 스레드 덤프를 정기적으로 수행하기 때문에 잘못 구현되면 에이전트에 오버헤드가 커질 수 있습니다. 와탭은 에이전트 부하를 최소화하면서 액티브 스택을 수집하기 위해 다양한 옵션들을 가지고 있습니다.

사이트맵 > 스레드 목록/덤프 메뉴에서 스레드 목록 중에 WhaTap-ActiveStackDump 스레드의 CPU Time을 확인하면 오버헤드를 판단할 수 있습니다.

최적화된 데이터 수집

  • 트랜잭션을 수행 중인 스레드에 대해서만 스택을 덤프합니다.

  • 액티브 스택 덤프 시간 간격을 조정할 수 있습니다.

    active_stack_second=10

  • 액티브 스택의 최대 라인에 제한되어 있습니다. Top 라인에서부터 기본 50라인을 수집합니다.

    trace_active_callstack_depth=50

  • 액티브 스택의 각 라인은 해시 처리되어 수집됩니다. text는 한 번만 수집됩니다.

  • 한 타임에 수집되는 최대 액티브 스택 개수도 제한되어 있습니다.

    active_stack_count=100

Background Thread에 대한 액티브 스택

기본적으로 액티브 스택은 트랜잭션이 수행되고 있는 스레드의 스택을 말합니다. 하지만 일부 백그라운드 스레드에 대해서도 스택을 분석할 필요가 있을 수 있습니다. 이때 옵션을 통해서 백그라운드 스레드에 대한 액티브 스택을 확보할 수 있습니다. 1.6.2 버전 이후부터 가능합니다.

  • async_stack_enabled의 값을 true로 설정하면 활성화됩니다.

    async_stack_enabled=false
  • 스택 덤프 간격은 포그라운드 액티브 스택 설정에 따라갑니다.

    active_stack_second=10
  • 대상 스레드 이름을 지정할 때는 *를 사용하여 문자열 패턴을 지정합니다.

    async_thread_match=http*,abc*

    스레드 이름으로 스택 덤프 대상을 식별합니다. ,를 사용하여 match를 여러 개 지정할 수 있습니다.

  • 스택의 Top 메소드가 async_thread_parking에 등록된 클래스 / 메소드일 때 스레드가 파킹 상태에 있다고 판단하고 덤프를 생성하지 않습니다.

    async_thread_parking_class=sun.misc.Unsafe
    async_thread_parking_method=park

참고 자료