Java Application 을 서비스하며 원본 소스의 수정없이 외부 결제 연동 결과, 중요 메서드 처리결과 등을 실시간으로 모니터링 하고자 할 때 유용한 방법을 기술하고 샘플링 합니다.
III. 샘플링한 결과 보기
1. 사용한 프로그램
- Server.jar : 성능테스트를 전문적으로 하는 지인의 소켓 부하 테스트 용 샘플 소스
- Jmeter : 위 지인에게 교육 받는 오픈소스 부하테스트 툴
- weaving.test.server-0.1.jar : WhaTap Weaving
- WhaTap Java Monitoring + Flex Board
2. 성능 측정 항목 설명 및 실시간 차팅
1) 측정 메서드
- addClient : 새로운 사용자가 붙으면 Server에서 Thread 를 생성하고 addClient 를 통해 연결을 붙임
- removeClient : 사용자가 접속을 끊으면 Thread 에서 removeClient 를 통해 연결을 끊음
- message : Server와 Client는 Conn/Disconn/SendMsg/Ack/Nack 등을 주고 받으며, 이때 이 메서드를 호출해 GUI 창에 해당 메시지를 출력하게 됨.
2) 측정 성능 항목
- 수행 카운트 : 해당 메서드의 수행 카운트 (5초 기간 내)
- 합산 수행시간 : 해당 메서드의 수행시간 합산 (5초단위, ms)
- 최대 수행시간 (1회) : 해당 메서드의 최대수행시간 (5초 기간 내)
- Exception Catch 횟수 : Error 등도 잡기위해 Throwable 로 Catch 된 횟수 (5초 기간 내)
3) 수행화면
Server.jar + WhaTap Java Agent(Weaving) + Jmeter + WhaTap Flex Board
3. WhaTap Weaving 작성
1) 원본 소스 (Server.jar -> TestServer, Decompiler 로 파악)
2) 성능 데이터 자료구조 작성
3) 모니터링 대상 클래스/메서드를 Weaving 하기위한 클래스 작성
4) Weaving 클래스 컴파일을 위한 더미클래스 작성
5) 성능 데이터 전달을 위한 WhaTap Weaving Agent 클래스 작성
6) 빌드
ㄱ. Ant빌드 (빌드는 맘대로 해도 됨. 단, MANIFEST.MF 에 항목 체크 필요)
ㄴ. MANIFEST.MF (아래 항목이 들어가야 함)