[오류해결] 스프링부트 Error: 1040-08004: Too many connections

소영·2024년 7월 24일

원인

  • AWS mariaDB 인스턴스 max_connections 디폴트 값 30
  • 프로젝트 중 30이 넘음

AWS

  • RDS > Parameter groups에서 신규 파라미터그룹을 등록합니다
    • 이전에 등록한 그룹이 있다면 수정
    • 디폴트 파라미터 그룹은 수정할 수 없음

max_connections 수정

  • max_connections의 기본 설정은 30
  • 새로운 파라미터 그룹을 만들면LEAST({DBInstanceClassMemory/25165760},12000) 디폴트
  • 현재 사용 중인 db.t3.micro는 vCPU: 2 RAM: 1 GiB (1 Gigabyte) 사양
  • 계산하면 42가 나옴(30으로 적용되는 것 같습니다)
  • spring boot 프로젝트 당 default connection 값이 10이므로 넉넉하게 300으로 수정

wait_timeout 수정

  • 180초 동안 연결이 없는 경우 커넥션 끊어지도록 설정

DB인스턴스에 파라미터 그룹 연결

  • RDS database 접속 -> 원하는 데이터베이스 선택 -> modify -> 파라미터 그룹설정
  • 저장 후 DB를 리부팅

데이터베이스 파라미터 수정이 비용에 영향을 줄 수 있는지?

  • 직접 비용: max_connections와 wait_timeout 값의 변경 자체는 직접적인 비용을 발생시키지 않습니다.
  • 간접 비용: 높은 max_connections 설정으로 인해 메모리 사용량이 증가하거나 성능 저하가 발생할 수 있으며, 이로 인해 더 높은 사양의 인스턴스가 필요할 수 있습니다. wait_timeout이 길어지면 유휴 커넥션이 많아져 자원 낭비가 발생할 수 있습니다.

애플리케이션 설정 수정

바꾼 DB설정을 반영하여 application.properties에 추가

# HikariCP 설정
spring.datasource.hikari.maximum-pool-size=300		# 최대 커넥션 수
spring.datasource.hikari.minimum-idle=10			# 최소 유휴 커넥션 수
spring.datasource.hikari.idle-timeout=150000        # 유휴 커넥션 최대 유지 시간 (밀리초 단위)
spring.datasource.hikari.connection-timeout=30000   # 커넥션 요청 대기 시간 (밀리초 단위)
spring.datasource.hikari.max-lifetime=150000        # 커넥션 최대 생명 주기 (밀리초 단위)
spring.datasource.hikari.connection-test-query=SELECT 1
  • 주석은 제거하고 입력해야합니다!
  • 이렇게 설정해야 스프링부트 프로젝트에서 오류 메시지 안뜹니다

참고

https://gksdudrb922.tistory.com/227

profile
개발할게요

0개의 댓글