반응형

상황

spring으로 만든 서비스가 정상적으로 동작하다가,
작업이 안 되는 경우가 발생해서 로그를 찾아보니, 아래의 내용이 남아있음

 

에러내용

Cause: java.sql.SQLTransientConnectionException:  Lost connection to backend server: network error (server1: Connection reset by peer)

Lost connection to backend server: network error (server1: Connection reset by peer); nested exception is java.sql.SQLTransientConnectionException: Lost connection to backend server: network error (server1: Connection reset by peer)

 

예상 원인

  • 원격 서버에서 Connection을 reset 처리하거나
  • 종료된 커넥션을 재사용하려고 할때
  • 클라이언트(브라우저)에서 정지버튼을 누르거나, 브라우저를 종료하거나, 다른 화면으로 이동하는 등의 이유로 서버 측에서 작업 결과를 전달할 곳이 없어졌을 때
  • Connection에서 Timeout 발생
  • 메모리부족
  • 소켓 고갈 등등…

 

원인

근본적인 원인 

위의 예상원인 모두 실제 원인의 보기이고,
회사에서 해당 이슈가 종종 발생하는 원인은 DB서버의 작업이 있는 경우에 많이 발생

 

DB 서버의 특정 작업(백업, 데이터 이동 등등 IO나 리소스를 많이 잡아먹는 작업)이 진행중

=> DB의 성능저하

=> 평소에 문제없던 쿼리가 실행되지 못하고 타임아웃

조치

근본적인 조치

근본적인 원인을 해결해야 함

DB 서버의 작업 종료 or 해결 : 리소스가 많이 필요한 해당 작업을 빨리 종료 시키면 정상적으로 동작함

하지만 주기적으로 해야하는 작업이라면

쿼리나 서비스 성능 개선을 통해 어느정도 커버할 수 있음

 

쿼리 튜닝으로 해결

타임 아웃 (시간제한) 을 길게 설정하는 방법도 있지만, 근본적으로 쿼리 실행시간이 너무 오래 걸림

평소에는 0.5초도 걸리지 않았지만, 특정상황에서 계속 타임아웃이 나서 튜닝 필요성이 없었음

=> 주기적으로 발생할 것으로 추측돼서, 쿼리 튜닝실행

=> 평소에는 크게 차이 나지 않지만, (최악의 경우에서) 더 효율적인 인덱스를 타면서 쿼리가 개선

=> 같은 상황에서는 더이상 발생하지 않음

반응형
반응형

에러 내용

Exception Type - I/O error on POST request for "주소": 주소; nested exception is java.net.UnknownHostException: 주소

=> 해당 호스트 정보 / DNS 등을 찾지 못해 발생

 

상세 내용

몇달동안 실제 운영서버에서 정상적으로 해당 api를 호출되다가, 간헐적으로 해당 에러가 나면서 요청 실패가 나는 상황
(
이틀간 수치가 급증하여, 조치 필요)

로컬에서도 같은 현상 발생 (간헐적으로 실패)

 

 

예상 원인

Java 애플리케이션에서 유효한 DNS정보를 응답받지 못하는 경우

=> Google DNS 서버가 해당 도메인을 제대로 인식하지 못 하거나, 문제가 잠시 생긴것으로 추측

 

해결 ( 1)

1. Hosts 파일 변경

DNS 되는것으로, Hosts에서 ip-DNS 등록해서 사용
=> 로컬에서도 손쉽게 적용가능하고, 재시작(리부팅)이 필요 없음. 단, 상대의 IP가 바뀌면 수동으로 다시 맵핑 시켜줘야 함

방법
vi /etc/hosts
내용 입력(ip,DNS) 127.0.0.1       localhost
(참고 :  ping 도메인 => 실제 ip 조회 가능)

 

2. DNS 설정 변경

주/보조가 모두 구글 서버라 하나를 다른 DNS Server를 바라보도록 변경해서 테스트해본 결과, 정상적으로 요청
=>  vi /etc/resolv.conf (운영체제 / 버전에 따라 다를수 있지만, IP or DNS Server 설정 부분을 찾아서 수정)

DNS1 - 8.8.8.8(Google) -> 1.1.1.1(Cloudflare)
DNS2 - 8.8.4.4(Google) -> 8.8.8.8 (Google)

반응형

+ Recent posts