트랜잭션
트랜잭션은 기록 설정에서 구성됩니다. VM 그룹 또는 VM 풀을 편집할 때 마법사에 처음 표시되는 단계가 트랜잭션 설정입니다.

중첩된 VM 그룹에 트랜잭션이 정의되어 있지 않으면 VM은 트랜잭션이 정의된 가장 가까운 조상 그룹에서 구성을 가져옵니다. “모든 VM” 구성에는 항상 연결된 트랜잭션 정의가 있으며 이 계층 구조에서의 검색에 항상 성공적인 마지막 경유지입니다.
중첩된 그룹이 트랜잭션 설정을 재정의하면 모든 설정을 재정의하며 부모 그룹의 설정과 병합되지 않습니다. 부모 그룹에서 선택한 정의를 재사용하려면 “세트 저장” 버튼으로 세트에 저장하고 “세트 추가” 버튼으로 중첩된 그룹의 구성에 포함하세요.

트랜잭션에 대한 메서드를 선택하는 방법은 트랜잭션 타입에 따라 다릅니다(아래 참조). 타입에 관계없이 각 트랜잭션 정의에는 선택적 명명 체계와 선택적 정책이 있습니다. 메서드 호출이 가로채지면 jvmguard는 트랜잭션 정의 목록을 탐색하여 처음으로 일치하는 항목의 명명과 정책을 적용합니다. 일치하는 항목에 “버리기” 플래그가 설정되어 있으면 호출이 제외되고 더 이상의 일치는 수행되지 않습니다.
트랜잭션의 이름은 명명 요소의 체인으로 구성됩니다. 사용 가능한 명명 요소 목록은 트랜잭션 타입에 따라 다릅니다. 각 타입의 고급 주제에서 설명합니다.
트랜잭션 타입
섹션 제목: “트랜잭션 타입”일반적으로 소수의 메서드 집합이 측정하려는 중요한 작업에 매핑되며, 이는 사용자 자신의 코드이거나 수정할 수 없는 라이브러리에 있을 수 있습니다. jvmguard는 이러한 경우를 위해 세 가지 트랜잭션 타입을 제공합니다. 기본 이상으로 구성에는 정교한 측면이 있으므로 각각 고급 주제에 자체 장이 있습니다.
선언적 트랜잭션은 jvmguard가 제공하는 어노테이션으로 코드에 정의됩니다. 명명은 해당 어노테이션으로 완전히 지정되지만 정책은 jvmguard UI에서 구성해야 합니다. 복잡한 트랜잭션을 정의하는 가장 유지 관리하기 쉬운 방법입니다. 프로젝트에 추가하는 방법은 선언적 트랜잭션에 대한 고급 주제를 참조하세요.
매핑된 호출 트랜잭션의 경우 특정 어노테이션 클래스 이름을 지정합니다. 추가 구성에서 어노테이션이 클래스에 적용되어야 하는지 메서드에 적용되어야 하는지, 상속된 클래스를 어떻게 처리해야 하는지 결정할 수 있습니다. 프레임워크가 이미 어노테이션을 사용하여 진입점을 지정하는 경우 유용합니다.
모니터링해야 하는 코드를 수정할 수 없는 경우 매칭 트랜잭션을 사용하면 선언적 트랜잭션과 동일한 모든 가로채기를 jvmguard UI에서 직접 지정할 수 있습니다. 자세한 내용은 매칭 트랜잭션의 자세한 설명을 참조하세요.
중첩된 트랜잭션
섹션 제목: “중첩된 트랜잭션”트랜잭션을 정의할 때 중요한 고려 사항은 어떤 종류의 중첩된 트랜잭션을 허용할 것인지입니다. jvmguard는 같은 이름을 가진 직접 중첩된 트랜잭션을 기록하지 않습니다. 더 제한적인 옵션은 다음과 같은 중첩된 트랜잭션을 방지하는 것입니다.
- 이 항목과 일치하는 트랜잭션: 중첩된 트랜잭션이 이 트랜잭션 정의에서 시작된 경우 중첩된 트랜잭션이 생성되지 않습니다.
- 같은 그룹 이름을 가진 트랜잭션: 이 옵션을 선택하면 이 트랜잭션 정의에 대한 그룹 이름을 구성해야 합니다. 여러 트랜잭션 정의가 동일한 작업에 대한 서로 다른 진입점이고 서로를 호출하는 경우 유용합니다.
- 같은 트랜잭션 타입의 트랜잭션: 같은 타입의 중첩된 트랜잭션 트리를 방지하므로 진입점만 보고 내부 구조는 보지 않으려는 경우에 적합한 옵션입니다.
- 모든 추가 항목: 현재 트랜잭션 정의에서 트랜잭션이 생성된 경우 모든 종류의 중첩된 트랜잭션을 방지하려면 이 옵션을 사용합니다.
재진입 억제는 직접 중첩될 트랜잭션에만 적용됩니다. 중첩된 트랜잭션이 허용되면 해당 트랜잭션 자체의 재진입 억제 설정이 다음 중첩 수준에 사용됩니다.
호출 트리와 핫스팟
섹션 제목: “호출 트리와 핫스팟”jvmguard는 기록된 모든 트랜잭션으로부터 호출 트리를 구축합니다. 호출 트리는 트랜잭션이 중첩되는 모든 서로 다른 시퀀스를 캡처하는 누적 데이터 구조입니다. 트랜잭션 C가 트랜잭션 A 내에서 호출되고 트랜잭션 B 내에서도 호출되면 호출 트리에 두 번 나타납니다. 한 번은 A의 자식으로, 한 번은 B의 자식으로 나타납니다. 이러한 각 시퀀스는 여러 번 발생할 수 있으며 호출 트리의 해당 경로를 따라 호출 수를 증가시킵니다.

각 트랜잭션의 숫자(총 시간, 호출 수 및 평균 시간)가 선택한 기간에 대해 표시됩니다. 기간이 완전히 측정되지 않은 경우 jvmguard는 뷰 상단에 커버된 백분율을 알려 줍니다. 예를 들어, jvmguard 서버를 시작할 때 현재 시간별 간격은 한 시간이 완전히 지날 때까지 완전히 측정되지 않습니다. 마찬가지로 jvmguard 서버를 얼마 동안 중지하면 양쪽에 불완전한 간격이 있는 이력의 구멍이 남습니다.
핫스팟은 호출 트리의 역으로, 각 트랜잭션의 모든 발생이 합산되어 백트레이스와 함께 표시됩니다. 백트레이스의 호출 수와 실행 시간은 트랜잭션이 아니라 이 경로를 따라 핫스팟이 호출된 횟수를 나타냅니다.
백트레이스에 대한 요점을 강조하기 위해 단일 최상위 노드가 아닌 모든 핫스팟에는 “누적 백트레이스”라는 자식 노드가 있습니다. 트랜잭션 검색은 뷰 상단의 필터 표시줄로 수행됩니다.

호출 트리와 핫스팟 뷰에서 선택한 간격에 대한 시간순 컨텍스트를 제공하기 위해 현재 간격이 강조 표시된
트랜잭션 타임라인이 하단에 표시됩니다. 이 타임라인을 사용하여 데이터 포인트를 클릭하여 다른 간격을 선택할
수도 있습니다. 단일 선택된 트랜잭션에 대한 타임라인을 표시하면 전체 트랜잭션 타임라인이 대체되며
텔레메트리 오른쪽 상단의 닫기 버튼 [x]를 클릭하여 복원할 수 있습니다.

너무 많은 트랜잭션 이름
섹션 제목: “너무 많은 트랜잭션 이름”트랜잭션 정의가 너무 많은 고유한 트랜잭션 이름을 생성하는 경우(예: 명명 체계에 모든 호출마다 다른 값이 포함된 경우) jvmguard는 트랜잭션 이름의 최대 수를 제한하고 이 상태를 해결하는 방법에 대한 지침이 담긴 수신함 메시지를 보냅니다.