트랜잭션 엔드포인트 설정
트랜잭션 엔드포인트는 트랜잭션의 시작 메소드입니다. 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()
가 적당하다는 것을 알 수 있습니다. 이 부분은 소스를 보고 판단해야 합니다.팁엔드포인트의 가장 중요한 기준은 종료되어야 한다는 것