SpringBoot를 활용한 Wep Application server 를 만든 후, 내가 만든 서버의 안전성 및 가용성을 확인하기 위해 부하 툴과 모니터링 툴을 활용해 알아보려고 합니다. 성능측정에 필요한 개념부터 직접 성능을 테스트 하고 어떤 점들을 개선했는지 적어보도록 하겠습니다.
Index
- 성능측정 할 때 알아야할 용어들
- 성능측정 전 알아야 할 JVM 개념 정리
사용자
서비스를 사용하는 사용자의 수 (부하를 주는 유저 수)
Acitve user:
어떤 요청을 보내고, 결과가 나오기를 기다리는 사용자
성능 테스트 시 virtual User 와 거의 동일하다.
Concurrent User
서비스에 접속한 사용자
서비스에 부하를 가할 가능성이 매우 높은 서비스 접속중인 유저
응답시간
응답시간은 요청시간과 응답시간으로 분리 가능하고 그 사이에는 Think time이 존재한다.
Think time이란 한 요청을 하고 다른 요청을하기까지 걸리는 시간을 의미한다.
위 사진의 Server의 의미는 (network + application server + db .. 등등) 서버에서의 대부분의 시간을 의미한다.
Response Timed의 Server에 해당하는 점을 중점적으로 측정하고 개선할 예정이다.
TPS
병목
병목이라고 함은 프로그램이 작동하는데 있어서 시간이 많이 소요되는 곳이라 할 수 있다.
보통의 웹 기반 서비스에서는 DB에서 많은 병목현상이 발생한다.
(DB 연결, DB 쿼리, 결과 수신및 처리,DB해제 등)
다른 병목지점으로는 was server, disk, network, 연계서버 등등 많은 요인들로 병목현상이 발생할 수 있다.
JVM
간단하게 자바 프로그램은 다음과 같은 순서로 동작
1. 빌드(컴파일 .java -> javac compiling -> .class)
2. 실행(class loading - execute)
JVM Architecture
JVM 메모리 영역
메소드 영역
힙 영역
런타임 스택 영역
PC Registers
네이티브 메소드 스택 영역
클래스 로딩 절차
loading - linking -initalizing 순서로 동작
loading
Linking
Initializing
Executon Engine
실행 엔진은 3가지로 구성됩니다.