본문 바로가기
MSA

아틸러리 그래프 부연설명

by notcherry 2024. 3. 1.

 

errors.EADDRINUSE: 로컬에서 로컬로 요청을 넣는 상황에서, 로컬이 사용할 수 있는 포트 개수가 모두 찼을 때 값이 나온다.(서버가 죽은 상태는 아) 포트가 같은 (내가 내 컴퓨터에 요청을 보내는 경우와 같은) 경우 제대로 측정하기 어렵다.

따라서 가용 포트번호가 없을 때 파란색 막대 그래프가 생기는 것이라고 볼 수 있겠다!

 

 

데드락이 걸리는 이유

1초에 10개를 처리할 수 있는 상황에 20개씩 요청이 들어온다면, 10개는 처리되지만 10개는 쌓이는 상황이온다.

10초 후, 더 이상 요청을 받지 않는다고 해도 쌓인 100개의 요청을 처리하느라 10초가 더 필요한 상황인데 이렇게 기존 요청도 처리하면서 새 요청까지 받아야 하는 상황이 오면 데드락에 걸린다. 서버 입장에서 이것을 방지하기 위해 타임 아웃을 걸 수 있다. 타임 아웃이란 내가 설정한 시간 동안 처리 안된 요청은 그냥 버리는 것이다. 이때 사용자 입장에서는 서버가 작동 안 된다고 생각할 수 있다. 

그럼에도 부하가 크다면 서버는 죽어버린다..

 

이러한 상황이 많이 발생하는 경우는 DB에 요청이 많을 때다. DB 요청 시 처리 방법은 커넥션을 맺고, 쿼리문을 날리고, 커넥션을 끊는 방법 세가지가 있는데 이때 메시지 큐를 사용하면 좋다. 제일 비용이 많이 드는 커넥션을 맺고 끊을 때 요청 내역을 메시지 큐에 쌓아두는 것이다. 메시지 큐는 렘, CPU에 임시로 저장하는 것이지 디비에 저장하는 것이 아니라 비용이 적다.이렇게 메시지 큐를 쌓아두는 것으로 부하를 줄일 수 있다. INSERT INTO 시에도 한 번에 집어 넣어야 하는 데이터가 많다면 BULK INSERT를 사용해 대용량 로드를 사용하는 방법이 있다.