본문으로 건너뛰기

스택

홈 화면 > 프로젝트 선택 > 분석 > 스택

특정 시간대의 호출 스택의 빈도와 메소드, 트랜잭션에 대한 상세 정보를 확인할 수 있습니다. 탑 스택, 유니크 스택, 액티브 스택을 조회할 수 있습니다. 탑 스택은 호출 빈도가 높은 메소드의 사용량을 보여주며, 유니크 스택은 동일한 호출 스택의 빈도를 분석합니다. 액티브 스택은 실행 중인 트랜잭션의 스택 정보를 정기적으로 수집하여 실시간 성능 분석을 가능하게 합니다.

노트

스택 분석 기능은 JavaPython, .NET 상품 플랫폼에서 지원합니다.

주요 기능 안내

다음 주요 기능을 이용할 수 있습니다. 스택 조회를 통해 애플리케이션의 성능 문제를 신속하게 식별하고 해결할 수 있습니다. 특정 메소드 호출의 빈도, 호출 경로, 응답 시간 등을 확인하여 성능 향상을 위한 방안을 마련할 수 있습니다.

스택

  • 스택 유형 선택

    탑 스택, 유니크 스택, 액티브 스택 중 원하는 스택을 선택하여 조회할 수 있습니다.

    • 탑 스택: 호출 빈도가 가장 높은 스택 정보를 제공합니다. 자세한 내용은 다음 문서를 참조하세요.

    • 유니크 스택: 실행된 메소드의 집합이 동일한 경우에 대한 통계 정보를 제공합니다. 자세한 내용은 다음 문서를 참조하세요.

    • 액티브 스택: 실행 중인 트랜잭션의 스택 정보를 제공합니다. 자세한 내용은 다음 문서를 참조하세요.

  • 시간 선택 / 시작일: 조회할 시간을 설정하세요. 특정 시간대의 스택을 조회하거나 원하는 기간을 설정할 수 있습니다. 스택 유형에 따라 조회할 수 있는 기간은 제한될 수 있습니다.

    노트

    탑 스택유니크 스택을 조회할 수 있는 최대 기간은 3일입니다.

  • 애플리케이션: 조회하려는 에이전트를 선택할 수 있습니다. 특정 에이전트를 선택할 수 있으며, 아무것도 선택하지 않으면 프로젝트에 포함된 전체 에이전트를 대상으로 조회합니다.

  • 컬럼 선택 아이콘 컬럼 선택: 원하는 컬럼 항목을 표시하거나 숨길 수 있습니다.

  • 비교하기: 동일한 필터 조건으로 1일 이내로 조회 시 선택한 스택을 시간대비로 비교할 수 있습니다. 이를 통해 시간에 따른 호출 스택의 변화를 파악하고 성능 트렌드를 확인할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.

  • 스냅샷 아이콘 : 각 스택 유형의 테이블 목록에서 스택 또는 트랜잭션 항목을 확장하면 가장 오른쪽에 스냅샷 아이콘이 표시됩니다. 이 아이콘을 선택하면 해당 스택 또는 트랜잭션 정보를 이미지 파일로 저장할 수 있습니다.

기본 사용 안내

  1. 화면 위에서 조회하길 원하는 스택 유형을 선택하세요.

  2. 시간 선택 또는 시작일에서 원하는 조회 시간을 설정하세요.

  3. 애플리케이션에서 조회할 에이전트를 선택하세요. 아무것도 선택하지 않으면 전체 에이전트를 대상으로 조회할 수 있습니다.

  4. 검색 아이콘 버튼을 선택하세요.

조회 결과를 스택 테이블의 목록에서 확인할 수 있습니다.

탑 스택

탑 스택에서는 호출 빈도가 가장 높은 메소드의 정보를 제공합니다. 스택 최상단에 위치한 메소드의 호출 빈도를 통해 서비스에 가장 영향을 미치는 메소드를 신속하게 확인할 수 있습니다. 메소드의 호출 빈도를 파악하여 CPU 또는 메모리에 부하가 걸리는 원인을 분석할 수 있습니다. 이를 통해 성능 개선을 위한 방안을 도출할 수 있습니다.

와탭은 10초(기본값) 간격으로 수집한 스레드 스택을 활용하여 메소드 레벨의 성능 지연 구간을 분석합니다.

DynamicClass.lambda_method(System.Runtime.CompilerServices.Closure,System.Object,System.Object[])
demo450.Controllers.DelayTestController.Get(Int32)
System.Threading.Thread.Sleep(Int32)
System.Web.Http.ApiController.ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext,System.Threading.CancellationToken)
System.Web.Http.Controllers.ActionFilterResult.ExecuteAsync(System.Threading.CancellationToken)
System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon,mscorlib]].Start[[System.Web.Http.Controllers.ActionFilterResult+<ExecuteAsync>d__5,System.Web.Http]](<ExecuteAsync>d__5 ByRef)
System.Web.Http.Controllers.ActionFilterResult+<ExecuteAsync>d__5.MoveNext()
System.Web.Http.Controllers.ApiControllerActionInvoker.InvokeActionAsync(System.Web.Http.Controllers.HttpActionContext,System.Threading.CancellationToken)
System.Web.Http.Controllers.ApiControllerActionInvoker.InvokeActionAsyncCore(System.Web.Http.Controllers.HttpActionContext,System.Threading.CancellationToken)
...

예시 스택에서 탑 라인lambda_method 입니다.

DynamicClass.lambda_method(System.Runtime.CompilerServices.Closure,System.Object,System.Object[])

탑 라인은 덤프를 수행할 스레드가 해당 메소드를 수행 중이라는 것을 의미합니다. 순간적으로 잡혔을 가능성도 있지만 확률적으로 해당 모듈 처리 시간의 합의 비율만큼 스택에 나타납니다. 이 탑 라인 메소드의 빈도를 계산하여 메소드 레벨의 성능을 판단할 수 있습니다. 와탭은 탑 라인 빈도 통계탑 스택(Top Stack)이라고 합니다.

Top stack

탑 스택 분석을 통해 도출된 메소드를 어떤 메소드가 호출했는지에 대한 빈도를 분석할 수 있습니다. Stack Trace 상의 각 스텝(스텝) 기준으로, 스텝과 스텝 간의 호출 비율을 백분율로 분석한 정보를 제공합니다. 최상위 스텝의 적체 빈도를 백분율로 산출하여 내림차순으로 정렬한 결과를 제시합니다.

Top stack

각 스텝 항목의 가장 왼쪽에 확장 아이콘 버튼을 선택하면 해당 스텝을 호출하는 상위 스텝의 호출 빈도 기준을 백분율로 산출하여 제공합니다.

탑 스택 통계는 충분히 많은 데이터를 가지고 판단하는 것이 좋습니다. 수집한 스택의 개수가 10개 미만의 소수인 경우 통계 의미를 갖기에 부족합니다.

탑 스택은 튜닝 시 인지하기 힘들었던 부분의 튜닝 포인트를 찾아내는 데 유용합니다. 호출 빈도가 가장 높은 스택은 현재 애플리케이션 서버에서 가장 많은 응답 지연을 발생하는 것으로 판단할 수 있습니다. 가장 왼쪽에 나타나는 비율은 애플리케이션 서버 성능에 영향을 미치는 정도입니다.

percent

안정적인 애플리케이션 서버일지라도 호출 빈도가 높은 스택은 성능 저하를 일으킬 가능성이 있으므로 해당 클래스는 유심히 보는 것이 좋습니다.

탑 스택을 클릭하면 해당 최상위 스택에 대한 호출 빈도를 확인할 수 있습니다. 탑 스택의 호출 관계는 1 대 1 관계이므로 탑 스택의 depth가 밑으로 내려갈수록 정보의 정확성이 떨어질 수 있습니다. 하위 depth에 대한 정보는 참고 용도로 사용하며 튜닝을 진행하세요.

애플리케이션 성능 개선을 위해 최상위 스텝의 적체 비율이 높은 모듈의 병목 가능성을 검토해야 합니다. 적체 비율이 높은 모듈의 경우 작은 성능 개선도 애플리케이션 전체에 상당한 개선 효과를 가져올 수 있습니다.

다이어그램으로 보기

복잡한 스택 호출 단계를 쉽게 이해할 수 있도록 다이어그램 차트를 제공합니다. 스택 테이블 오른쪽 위에 다이어그램으로 보기 버튼을 선택하세요. 이를 통해 각 단계의 호출 빈도와 실행 경로를 한눈에 파악할 수 있습니다.

다이어그램으로 보기

  • 각 노드를 선택하면 하위 depth의 스택이 표시됩니다.

  • 마우스 스크롤을 통해 확대/축소하거나 드래그하여 움직일 수 있습니다.

  • 스택 테이블 목록으로 돌아가려면 테이블로 보기 버튼을 선택하세요.

주의 사항

탑 스택

System.Threading.Thread.Sleep(Int32)
// System.Web.Http.ApiController.ExecuteAsync의 호출 비율은 58.37%
System.Web.Http.ApiController.ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext,System.Threading.CancellationToken)
// System.Web.Http.Controllers.ActionFilterResult.ExecuteAsync의 호출 비율은 99.99%
System.Web.Http.Controllers.ActionFilterResult.ExecuteAsync(System.Threading.CancellationToken)

System.Threading.Thread.SleepSystem.Web.Http.ApiController.ExecuteAsyncSystem.Web.Http.Controllers.ActionFilterResult.ExecuteAsync의 호출 비율이 58.37% * 99.99%를 의미하지는 않습니다. System.Web.Http.ApiController.ExecuteAsync에서 타 모듈의 호출 가능성이 존재하기 때문입니다.

탑 스택을 통해 호출 비율을 판단할 경우, 각 스텝 간 호출 비율을 곱하여 전체 호출 관계 비율을 산출해서는 안 됩니다. 탑 스택의 호출 비율은 Stack Trace 상에 노출된 정보의 스텝 간 호출 비율의 산출 결과이기 때문에, 스텝 간 호출 비율로 전체 호출 비율을 도출할 경우 왜곡된 결과를 도출하게 됩니다.

유니크 스택

유니크 스택은 Stack Trace 전체의 정확한 호출 정보를 기반으로 실행된 메소드의 집합이 동일한 경우에 대한 통계 정보를 제공합니다.

Unique stack

가장 많이 사용되는 스택의 정보를 파악할 수 있습니다. 동일한 스택이 여러 번 반복되더라도 중복을 제거하여 가장 높은 호출 빈도의 스택을 확인할 수 있습니다. 예를 들면 적체 비율이 높은 Stack Trace를 식별할 수 있습니다. 상세 호출 스텝 검토를 통한 호출 경로 상에 이상 모듈의 존재 여부를 파악할 수도 있습니다.

Unique stack

각 스택 항목에서는 메소드의 호출 경로(스택)와 해당 메소드가 차지하는 비율(퍼센트), 전체 호출 건수(건수)을 표시합니다. 각 스텝 항목의 가장 왼쪽에 확장 아이콘 버튼을 선택하면 해당 호출 스택의 메소드 이름, 파일 이름, 라인 번호 등 문제 분석에 유용한 정보를 제공합니다.

필터링하기

Unique stack

필터 항목에 메소드 명을 입력해 사용자가 원하는 조회 결과를 필터링할 수 있습니다. 문자열을 입력한 다음 검색 아이콘 버튼을 선택하세요.

액티브 스택

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

액티브 스택에서는 수집된 액티브 스택을 시계열 차트로 확인할 수 있습니다. 장시간 실행되는 메소드와 단시간에 실행되지만 자주 실행되는 메소드의 비율을 통해 실행 중인 트랜잭션의 상태를 실시간으로 파악할 수 있습니다.

Active stack

차트는 5분간의 단위 통계 데이터를 활용해 Active Transaction의 수를 막대 그래프로, TPS를 꺾은 선 그래프로 표시합니다. 특정 시간대의 막대 그래프를 클릭하면 해당 시간대의 Active Transaction의 목록을 확인할 수 있습니다.

Active stack

트랜잭션 목록에서 가장 왼쪽에 확장 아이콘 버튼을 선택하면 해당 트랜잭션의 액티브 스택 정보를 확인할 수 있습니다.

노트
  • 액티브 트랜잭션 수집에 대한 자세한 내용은 다음 문서를 참조하세요. 그 외 트랜잭션 수집과 관련한 에이전트 옵션은 다음 문서를 참조하세요.

  • 와탭 에이전트는 액티브 트랜잭션에서 매 10초(옵션 가능)마다 덤프한 액티브 스택을 서버에 전송합니다. 수집 간격에 대한 에이전트 옵션은 다음 예시를 참조하세요.

    whatap.conf
    active_stack_second=10

필터링하기

Unique stack

필터 항목에 트랜잭션 명을 입력해 사용자가 원하는 조회 결과를 필터링할 수 있습니다. 문자열을 입력한 다음 검색 아이콘 버튼을 선택하세요.

스택 비교하기

탑 스택유니크 스택에서는 일정 기간을 기준으로 시간에 따른 비율 변화와 수집 건수에 대한 히스토리를 제공합니다.

시간 선택에서 조회할 시간을 설정한 다음 비교하기 버튼을 선택하세요. 동일한 필터 조건에서 1일 이내 기간 조회 시 스택을 시간대비로 비교할 수 있습니다. 이를 통해 시간에 따른 호출 스택의 변화를 파악하고 성능 트렌드를 확인할 수 있습니다. 또한 장애 시점 현황 파악, 성능 개선 전/후 비교에 유용한 자료로 활용할 수 있습니다.

비교하기

  • 퍼센트: 조회 기간 선택된 스택의 비율 변화를 확인할 수 있습니다.

  • 건수: 수집되는 스택의 수는 액티브 트랜잭션 수에 비례합니다. 예를 들어, 특정 구간에서 수집량이 증가했다면 서비스 지연이나 급격한 유입량 증가가 있었음을 알 수 있습니다.

노트

비교하기 버튼이 활성화되지 않는다면 조회할 시간 범위를 초과했거나 비교할 시간의 데이터가 충분하지 않은 경우입니다. 시간 선택에서 조회할 수 있는 시간 범위를 설정해야 비교하기 버튼이 활성화됩니다.