트랜잭션 엔드포인트 설정
트랜잭션 엔드포인트는 트랜잭션의 시작 메소드입니다. HTTP 트랜잭션의 경우에는 HttpServlet.service()
혹은 Filter.doFilter()
가 트랜잭션의 시작점이고 이곳을 트랜잭션 엔드 포인트라고 부릅니다.
NON HTTP 추적
트랜잭션 엔드포인트로 지정된 메소드가 시작해서 종료될 때까지의 성능 을 트랜잭션 성능이라고 합니다. Non http 트랜잭션을 추적하기 위해서는 엔드포인트를 지정해야 합니다.
엔드포인트 찾기
- 트랜잭션이 호출될 것으로 추정되는 모든 메소드에 대해 트레이스 추적을 설정하세요.
- 다시 시작 후 트랜잭션을 발생시켜 모니터링하세요.
back stack
옵션을 켜서 진입 메소드를 정확히 파악하세요.
대상 선정
-
메소드 트레이스 설정
메소드 트레이스를 설정하세요. 확실하게 트랜잭션에서 호출되는 클래스를 지정하세요. DB를 사용하는 프로그램에서는 JDBC 드라이버가 유용합니다.
whatap.confhook_method_patterns=jdbc.*.*
hook_method_access_public_enabled=true
hook_method_access_protected_enabled=true
hook_method_access_none_enabled=true -
트랜잭션 시작 옵션 설정
메소드가 호출되면 트랜잭션을 시작하세요. 트랜잭션 시작 옵션과 트랜잭션 시작 시 스택을 덤프하는 옵션을 켜세요.
whatap.conftrace_auto_transaction_enabled=true
trace_auto_transaction_backstack_enabled=true -
재시작 후 트레이스 분석
다시 시작하세요. 이후 서비스를 호출하면 트랜잭션이 추적되는 것을 볼 수 있습니다.
트랜잭션을 조회하면
jdbc.*
로 시작하는 모든 클래스의 메소드가 이 트랜잭션으로 나타나는 것을 알 수 있습니다. 트랜잭션 트레이스를 조회하면 TRANSACTION BACKSTACK라는 메시지 스텝을 확인할 수 있습니다.TRANSACTION BACKSTACKjdbc.FakePreparedStatement.executeQuery(FakePreparedStatement.java),
com.virtual.dao.SelectDAO.execute2(SelectDAO.java:29),
com.virtual.web.SimulaNonHttp.execute(SimulaNonHttp.java:147),
com.virtual.web.SimulaNonHttp.process(SimulaNonHttp.java:76),
com.virtual.web.SimulaNonHttp.run(SimulaNonHttp.java:100) -
스택 내용 확인
스택 내용을 확인하면 어떤 메소드로부터 출발하고 있는지 추정할 수 있습니다.
Examplecom.virtual.web.SimulaNonHttp.execute(SimulaNonHttp.java:147),
com.virtual.web.SimulaNonHttp.process(SimulaNonHttp.java:76),
com.virtual.web.SimulaNonHttp.run(SimulaNonHttp.java:100)위 3개의 메소드 중에 하나를 트랜잭션 시작점으로 판단할 수 있습니다. 이 상황에서는 역 컴파일을 수행해서 적절한 트랜잭션 엔드포인트를 결정해야 합니다.
로직을 보면
SimulaNonHttp.run
내에서while()
가 돌면서SimulaNonHttp.process()
을 호출하고SimulaNonHttp.execute()
가 수행됩니다.process()
가 적당하다는 것을 알 수 있습니다. 이 부분은 소스를 보고 판단해야 합니다.팁엔드포인트의 가장 중요한 기준은 종료되어야 한다는 것입니다. 정상적인 상황에서 지연되지 않고 곧바로 종료되어야 성능적인 판단을 할 수 있습니다.
트랜잭션 엔드포인트 지정
-
트랜잭션 시작 지점을 다음과 같이 설정하세요.
whatap.confhook_service_patterns=com.virtual.web.SimulaNonHttp.process
-
애플리케이션을 다시 시작하세요.
process()
메소드가 새로운 트랜잭션의 엔드포인트가 됩니다.
hook_service_patterns
옵션은 와일드카드 문자를 사용할 수 없으며, 2개 이상의 값을 설정하려면 쉼표(,)를 구분자로 이용하세요.