30시간이 지나면 서버 응답이 느려지는 이유: JVM 메모리 스왑으로 인한 응답 지연 트러블슈팅
·
etc
배경개인 프로젝트로 운영 중인 기프티콘 공유 서비스 shareticon를 사용하던 중, 이상한 증상을 발견하게 되었습니다. 오랫동안 서비스에 접속하지 않다가 쿠폰 목록을 조회하면 응답이 눈에 띄게 느려지는 경우가 생기는 것이었습니다.증상쿠폰 목록 조회 API에서 간헐적으로 1초 이상의 응답 지연이 발생합니다.장시간 쿠폰 목록 조회 API를 사용하지 않다가 호출하는 경우, API 응답까지 평균적으로 1초 이상 소요1회의 응답 지연 호출 이후에는 응답 속도가 30ms ~ 60ms 정도 수준으로 정상치로 복귀재현 결과 서버가 재기동된 직후만의 문제는 아님증상이 간헐적으로 발생했기 때문에, 재현 조건을 알아보기 위해 스크립트를 통해 호출 간격을 조금씩 늘려가며 테스트를 진행했습니다. 30분, 1시간, 2시간, ..
[AWS] CloudWatch를 활용한 EC2 인스턴스 장애 자동 복구 시스템 구축하기
·
etc
배경현재 개인 프로젝트 shareticon의 백엔드 서버는 EC2 인스턴스에서 도커를 통해 실행되고 있으며, Prometheus와 Grafana를 사용하여 서버 내부 지표들을 모니터링하고 있습니다. 그렇기에 서버 헬스에 문제가 생기면 이를 통한 이메일 알림으로 최대한 장애를 빠르게 파악할 수 있겠다고 생각하고 있었습니다. 그러던 중, 지인에게 shareticon 서비스를 소개해 드릴 기회가 있어 서비스 배포 주소로 접속했는데.. 정상적인 서비스 화면 대신 전혀 예상하지 못한 에러 페이지를 마주치게 되었습니다 😰이유 조사제가 장애를 확인한 시점은 서버가 내려간 지 무려 7시간이나 지난 뒤였습니다. 애플리케이션 내부의 메트릭만을 수집하게 되는 Prometheus의 특성 상 인스턴스 자체에 문제가 생긴 상..
트랜잭션 격리 수준과 동시성 제어 이야기 (2) : SERIALIZABLE과 Deadlock
·
etc
포스팅 목표 트랜잭션 격리 수준과 동시성 제어 이야기 (1) : @Transactional과 synchronized들어가기 전.. Spring @Transactional with synchronized keyword doesn't workLet's say I have a java class with a method like this (just an example) @Transactional public synchronized void onRequest(Request request) { if (request.shouldAddBook()) { if (seondays.tistory.com(이전 포스팅에서 이어집니다) 이번 포스팅에서는 MySQL InnoDB 트랜잭션의 격리 수준을 `REPEATABLE READ..
트랜잭션 격리 수준과 동시성 제어 이야기 (1) : @Transactional과 synchronized
·
etc
들어가기 전.. Spring @Transactional with synchronized keyword doesn't workLet's say I have a java class with a method like this (just an example) @Transactional public synchronized void onRequest(Request request) { if (request.shouldAddBook()) { if (database.stackoverflow.com해당 스택오버플로우 질문을 참고하여 글을 작성하였습니다. 프로젝트를 진행하면서 마주친 동시성 문제의 해결을 위해 자료를 찾아보던 중 `@Transactional`과 `synchronized`를 함께 사용하면 문제가 발생한다는 것..
왜 내가 만든 서버는 서버가 먼저 요청을 끊는 걸까? 궁금증 해결기
·
etc
배경네트워크 스터디를 진행하면서 HTTP 1.1에서는 일반적으로 연결을 끊을 때 클라이언트 측이 먼저 close를 통해 FIN 플래그를 1로 만든 패킷을 보낸다는 사실을 알게 되었습니다. 이에 제가 구현한 WAS 서버에서도 마찬가지인지가 궁금해져 WireShark를 통해 패킷을 주고받은 내역을 확인해 보게 되었는데, 저의 WAS 서버에서는 클라이언트 측이 아닌 서버 측에서 먼저 FIN 플래그를 보내 연결을 끊고 있었습니다. 물론 서버 - 클라이언트 둘 다 먼저 연결을 끊는 것이 가능하기 때문에 크게 문제 되는 상황은 아니지만, 학습 차원에서 WAS 서버와 통신을 진행할 때도 클라이언트가 먼저 FIN 요청을 보내도록 하는 상황을 만들어 보고 싶었습니다.기존 코드 구조소켓을 이용해 실제로 클라이언트의 요청을..
리눅스 scp 사용 시 Permission denied (publickey).lost connection 오류 해결기
·
etc
EC2 인스턴스로 띄운 우분투 서버에 DB를 설치하기 위해 설치 파일을 전송하는 과정에서 Permission denied (publickey).lost connection 오류가 계속해서 발생하고 있었습니다. 따라서 아래 방법들은 기본적으로 scp 명령으로 파일을 전송할 때의 상황을 기준으로 시도한 내용으로, 인스턴스 접근에 관한 더 광범위한 내용은 I'm receiving "Permission denied (publickey)" or "Authentication failed, permission denied" errors when trying to access my EC2 instance. How do I resolve this? 를 참고하시면 좋을 것 같습니다. 해당 오류 해결을 위해 점검해볼만한 것..