Azure에서 Amazon RDS의 Postgres 데이터베이스에 연결하는 시간 초과
데이터베이스 연결을 일정 시간 유휴 상태로 두면 응용 프로그램에서 다음 예외가 발생합니다.
... An I/O error occured while sending to the backend.; nested exception is org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.] with root cause
java.net.SocketException: Operation timed out
at java.net.SocketInputStream.socketRead0(Native Method)
psql에서도 동일한 문제가 발생하고 로컬 데이터베이스에 연결하는 데 문제가 없기 때문에 RDS에 문제가 있다고 확신합니다.
psql=> select 'ok';
SSL SYSCALL error: Operation timed out
psql=> select 'ok';
SSL SYSCALL error: EOF detected
The connection to the server was lost. Attempting reset: Succeeded.
저는 상황을 개선하는 작업을 제안하는 다른 질문을 발견했지만 해결하지 못했습니다(타임아웃은 이제 훨씬 더 오래 걸립니다).
JDBC(톰캣 연결 풀링) 및 JDB와 함께 Spring Boot을 사용하고 있습니다.CT 템플릿.
주변에 해결책이나 해결책이 있습니까?연결 풀을 강제로 테스트하고 다시 연결하는 것입니까?이 환경에서 어떻게 해야 합니까?
편집: 내 연결 문자열입니다.
jdbc:postgresql://myhost.c2estvxozjm3.eu-west-1.rds.amazonaws.com/dashboard?tcpKeepAlive=true
솔루션:
선택한 답변에 제시된 대로 RDS 서버 측 TCP_KeepAlive 매개 변수를 편집했습니다.사용하는 매개 변수는 다음과 같습니다.
tcp_keepalives_count 5
tcp_keepalives_idle 200
tcp_keepalives_interval 200
연결 추적 기능은 마치 연결 추적 기능인 것처럼 보이지만, 잠시 후에는 연결을 잊어버립니다.
TCP 킵얼라이브를 활성화하는 것이 좋습니다.AWS RDS 구성에서 서버 측을 사용하도록 설정할 수 있으며, 그렇지 않은 경우 JDBC 드라이버에서 클라이언트 측을 요청할 수 있습니다.
TCP 킵얼라이브는 오버헤드가 훨씬 낮고 서버 쿼리 로그에 불필요한 로그 스팸이 발생하지 않기 때문에 검증/테스트 쿼리보다 훨씬 좋습니다.
시도해 보세요
spring.datasource.validation-query=SELECT 1
spring.datasource.test-on-borrow=true
(참조)AbstractDataSourceConfiguration
다른 옵션의 경우.)
연결 문자열에 포트도 포함합니까 아니면 끝점만 포함합니까?연결 문자열에서 전체 끝점을 사용해 보십시오.또한 RDS 인스턴스에 할당된 Security Group에 올바른 포트와 Inbound CIDR이 정의되어 있는지 확인합니다.
언급URL : https://stackoverflow.com/questions/22696745/timeouts-connecting-to-a-postgres-database-on-amazon-rds-from-azure
'source' 카테고리의 다른 글
Javascript 내에서 테마 색상 배열 검색 (0) | 2023.07.10 |
---|---|
Oracle에서 SQL을 통해 테이블 주석을 얻는 방법은 무엇입니까? (0) | 2023.07.10 |
fatal: git-write-tree: 트리 작성 오류 (0) | 2023.07.10 |
GitHub에서 다른 사람의 코드에 기여하려면 어떻게 해야 합니까? (0) | 2023.07.05 |
목록에서 NULL 요소 제거 (0) | 2023.07.05 |