[우테코] 스탬프크러쉬의 HikariCP 커넥션 풀 사이즈 설정

2023. 10. 17. 16:00· PROJECT/Stamp Crush
목차
  1. 💋 목표
  2. 💋 예상
  3. 💋 실습 방법
  4. ✔️ Ngrinder 설치 후 실행
  5. ✔️ 스크립트
  6. ✔️ 실습 환경
  7. 💋 실습 
  8. ✔️ HikariCP Maximum Pool Size: 5개
  9. ✔️ HikariCP Maximum Pool Size: 2개
  10. ✔️ HikariCP Maximum Pool Size: 10개(기본 설정)
  11. 💋 결정
  12. ✔️ 풀 사이즈 5개로 결정
  13. ✔️ HikariCP Maximum Pool Size 설정
반응형

 

 

 

 

안녕! 

우아한테크코스 5기 [스탬프크러쉬]팀 깃짱이라고 합니다. 

 

스탬프크러쉬 서비스의 소스 코드 바로가기

사장모드: stampcrush.site/admin

고객모드: stampcrush.site

 

 

💋 목표

  • 수치를 설정하고 정한 이유를 발표한다.
  • hikariCP configuration 보고 필요한 값 설정한다.

 

💋 예상

무조건 HikariCP 커넥션 풀의 크기를 크게 잡았다고 해서 성능이 개선되는 것은 아니다. PostgreSQL이 추천하는 Connection Pool Size 공식에 따르면, Connection Pool Size = (core_count * 2) + effective_spindle_count 로 설정했을 때 최적이다.

 

풀 사이즈를 무한정 늘린다고 하더라도 CPU 코어 수가 한정되어 있어 멀티 쓰레딩을 하게 되더라도 컨텍스트 스위칭으로 인해 비효율이 발생한다. 그렇다고 풀 사이즈를 크게 줄이게 되면 디스크나 네트워크를 사용하는 동안은 스레드가 block되어 다른 작업을 할 수 없고, 그에 따라 성능이 저하되기 때문에, 위와 같은 식이 도출된다.

 

  • core_count: CPU 코어 개수.
  • effective_spindle_count: 하드 디스크의 개수. spindle은 DB 서버가 관리할 수 있는 동시 I/O 요청의 개수를 의미한다.

 

스탬프크러쉬에서 사용중인 EC2 인스턴스의 core_count는 2개이고, 우리가 사용중인 데이터베이스 클라우드 서버의 실제 물리 디스크 개수는 알 수 없어서, 보수적으로 1개로 생각해 effective_spindle_count 는 1개로 설정했다.

 

 

💋 실습 방법

✔️ Ngrinder 설치 후 실행

export NGRINDER_HOME=${HOME}/.ngrinder
export JAVA_HOME=$(/usr/libexec/java_home -v 11)
java -Djava.io.tmpdir=${NGRINDER_HOME}/lib -jar ngrinder-controller-3.5.8.war

 

 

✔️ 스크립트

import static net.grinder.script.Grinder.grinder
import static org.junit.Assert.*
import static org.hamcrest.Matchers.*
import net.grinder.script.GTest
import net.grinder.script.Grinder
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
// import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith

import org.ngrinder.http.HTTPRequest
import org.ngrinder.http.HTTPRequestControl
import org.ngrinder.http.HTTPResponse
import org.ngrinder.http.cookie.Cookie
import org.ngrinder.http.cookie.CookieManager

/**
* A simple example using the HTTP plugin that shows the retrieval of a single page via HTTP.
*
* This script is automatically generated by ngrinder.
*
* @author admin
*/
@RunWith(GrinderRunner)
class TestRunner {

	public static GTest test
	public static HTTPRequest request
	public static Map<String, String> headers = [:]
	public static Map<String, Object> params = [:]
	public static Map<String, Object> params2 = [:]
	public static List<Cookie> cookies = []

	@BeforeProcess
	public static void beforeProcess() {
		HTTPRequestControl.setConnectionTimeout(300000)
		test = new GTest(1, "3.37.28.4")
		request = new HTTPRequest()
		grinder.logger.info("before process.")
	}

	@BeforeThread
	public void beforeThread() {
		test.record(this, "test")
		grinder.statistics.delayReports = true
		grinder.logger.info("before thread.")
	}

	@Before
	public void before() {
		headers.put("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIyIiwiZXhwIjoxNjk1MjgyMzEyfQ.lgNhB8MH3cO3j2F7Vc4ehXjNtp0-1lpNp7kDVlVDjsHuIMLzVuLTUECy_y4rjZZRoB4qEIc4aJmoiMat8OgLFw")
		
		request.setHeaders(headers)
		CookieManager.addCookies(cookies)
		grinder.logger.info("before. init headers and cookies")
	}

	@Test
	public void test() {
		HTTPResponse response = request.GET("http://3.37.28.4:8080/api/admin/customers?phone-number=01038626099", params)

		if (response.statusCode == 301 || response.statusCode == 302) {
			grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", response.statusCode)
		} else {
			assertThat(response.statusCode, is(200))
		}
	}
}

 

✔️ 실습 환경

프로세스 10개에 쓰레드 각각 100개로, 총 1000개의 가상 Agent를 사용해 5분 동안 점진적으로 요청을 보냈고, interval은 1000ms로 설정했다.

 

 

💋 실습 

✔️ HikariCP Maximum Pool Size: 5개

 

 

✔️ HikariCP Maximum Pool Size: 2개

 

 

✔️ HikariCP Maximum Pool Size: 10개(기본 설정)

 

 

 

💋 결정

✔️ 풀 사이즈 5개로 결정

예상과 비슷한 결과가 나왔고, 풀 사이즈를 5개로 설정했을 때 TPS가 가장 높고, MTT도 가장 낮게 나온 것을 확인했다. 5개로 변경! ⭐️

 

✔️ HikariCP Maximum Pool Size 설정

프로젝트 내 application.yml 파일에 아래와 같이 설정 추가함.

 

spring:
	datasource:
		hikari:
			maximum-pool-size: 5

 

 

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟

 

 

 

반응형

'PROJECT > Stamp Crush' 카테고리의 다른 글

[우테코] 무중단 배포 자동화(2): 배포서버에 Github Actions self-hosted runners, Nginx, Docker 설정  (2) 2023.10.28
[우테코] 무중단 배포 자동화(1): Github Actions workflow 생성, Secrets 설정  (2) 2023.10.27
[모집공고] 스탬프크러쉬 기획/영업/마케팅 팀원 모집  (0) 2023.10.16
[우테코] 스탬프크러쉬의 실제 사용자(카페 사장)와 함께한 일주일  (5) 2023.10.12
[우테코] 스탬프크러쉬의 무중단 배포 자동화 (Zero-Downtime Deployment using Docker, Jenkins, Nginx, Spring Boot)  (0) 2023.10.11
  1. 💋 목표
  2. 💋 예상
  3. 💋 실습 방법
  4. ✔️ Ngrinder 설치 후 실행
  5. ✔️ 스크립트
  6. ✔️ 실습 환경
  7. 💋 실습 
  8. ✔️ HikariCP Maximum Pool Size: 5개
  9. ✔️ HikariCP Maximum Pool Size: 2개
  10. ✔️ HikariCP Maximum Pool Size: 10개(기본 설정)
  11. 💋 결정
  12. ✔️ 풀 사이즈 5개로 결정
  13. ✔️ HikariCP Maximum Pool Size 설정
'PROJECT/Stamp Crush' 카테고리의 다른 글
  • [우테코] 무중단 배포 자동화(2): 배포서버에 Github Actions self-hosted runners, Nginx, Docker 설정
  • [우테코] 무중단 배포 자동화(1): Github Actions workflow 생성, Secrets 설정
  • [모집공고] 스탬프크러쉬 기획/영업/마케팅 팀원 모집
  • [우테코] 스탬프크러쉬의 실제 사용자(카페 사장)와 함께한 일주일
깃짱
깃짱
연새데학교 컴퓨터과학과 & 우아한테크코스 5기 백엔드 스타라이토 깃짱
반응형
깃짱
깃짱코딩
깃짱
전체
오늘
어제
  • 분류 전체보기
    • About. 깃짱
    • Weekly Momentum
      • 2024
    • PROJECT
      • AIGOYA LABS
      • Stamp Crush
      • Sunny Braille
    • 우아한테크코스5기
    • 회고+후기
    • Computer Science
      • Operating System
      • Computer Architecture
      • Network
      • Data Structure
      • Database
      • Algorithm
      • Automata
      • Data Privacy
      • Graphics
      • ETC
    • WEB
      • HTTP
      • Application
    • C, C++
    • JAVA
    • Spring
      • JPA
      • MVC
    • AI
    • MySQL
    • PostgreSQL
    • DevOps
      • AWS
      • 대규모 시스템 설계
    • frontend
      • HTML+CSS
    • NextJS
    • TEST
    • Industrial Engineering
    • Soft Skill
    • TIL
      • 2023
      • 2024
    • Linux
    • Git
    • IntelliJ
    • ETC
      • 日本語

블로그 메뉴

  • 홈
  • 깃허브

인기 글

최근 글

태그

  • 람다와스트림
  • Stream
  • Composition
  • 우아한테크코스
  • 상속과조합
  • 우테코5기
  • 스트림
  • Java
  • 조합
  • 우테코
  • 우아한테크코스5기
  • 람다
  • 함수형프로그래밍
  • lamda
  • 레벨로그
  • 예외
  • TDD
  • OOP
  • 상속
  • 컴포지션
hELLO · Designed By 정상우.v4.2.0
깃짱
[우테코] 스탬프크러쉬의 HikariCP 커넥션 풀 사이즈 설정
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.