본문 바로가기
IT/Server_서버

[Server] Hangup이란? / 대처법

by 무브영/movewoo0 2021. 3. 9.
728x90
반응형

안녕하세요. 이번 포스팅에서는 서버의 hangup 현상과 대처방안들에 대해서 포스팅해보겠습니다. 해당 경우들은 제가 알고 있는 경우들이며 다른 상황도 많을 수 있으므로 추가적으로 알게되는 경우에 대해서는 업데이트 하도록 하겠습니다.

 

 


 

0. Hang up

 

Hang UP은 통상적으로 서버가 실행은 되고 있지만, 어떤 요청 시에 아무런 응답이 없는 것을 의미합니다. 서버에서 무엇을 입력해도 안먹히고 화면도 안나오지만 서버자체는 가동되고있는 그런 상황입니다.

 

경험상 실제로 Hang이 걸렸을 때, 서버 인스턴스에서 키보드 입력도 안되고 화면도 멈춤상태이지만 인스턴스에 올라가 있는 서비스는 정상적으로 작동하는 경우가 있습니다.

 

 

 


 

1. Hang up의 종류

 

1). 통상적인 Hang up 현상

 

여러 통상적인 Hang up 현상은 서버의 자원(리소스) 부족으로 인해서 Hang up이 발생하곤 합니다.

 

서버의 자원들이 여러 개의 Thread들을 실행하느라 추가적인 작업 수행에 필요한 Thread가 없을 수 있습니다. 결국 모든 자원과 쓰레드가 바쁜 상황입니다.

 

이에 대한 해결방안은

 

1. 장비의 스펙을 향상 시키는 것이 제일 단순한 방법
2. 가비지 콜렉션을 튜닝
3. Log를 분석해서 Hang up 자체의 상황에서의 로그는 모르겠지만 그 전에 어떤 호출을 통해 Hang이 걸렸는지 유추

그렇지만 세가지 모두 Hang up이 걸린 상황에서의 대처법이라기보다 예방법에 가깝습니다.


2). Deadlock

 

Deadlock이란 단어는 풀어쓰면 교착현상으로 서로가 Lock의 원인이 되어 이러지도 저러지도 못하는 교착의 상황을 말합니다.

 

이 교착의 상황이 발생하는 것은 여러가지 조건이 있으며 발생 시에는 교착 상태에서 서버 Hang up까지 이어지곤 합니다.

 

Deadlock 상태가 걸리는 조건들은

 

1. 프로세스가 자원을 반환하지 않을 때.
자원의 레퍼런스 문제로 사용하지 않는 객체(오브젝트)들을 유지해서 문제가 생깁니다.

 

2. 점유 대기의 경우.
1번 프로세스가 #1의 자원을 점유하고 그 프로세스를 종료하기 위해서 #2의 자원이 필요할 때, 2번 프로세스가 #2의 자원을 점유하고 있고 2번 프로세스 종료를 위해서 #1의 자원이 필요합니다.
이런 상황에서는 서로가 필요한 자원을 상대가 점유하고 있는 상황에서 교착이 일어납니다.

 

3. 프로세스 동기화, 문맥 교환(Context Change)
프로세스 동기화에서는 쓰레드들에게 우선순위를 부여하여 수행할 수 있는 권한을 줍니다(문맥교환). 그리고 그 상황에서 쓰레드들은 Lock을 가지게 되는데, 이 Lock을 주고받는 과정에서 서로가 완전하게 Lock이 해제되지않아서 영향을 끼치는 경우에 Deadlock이 발생합니다.

 


 

본 포스팅의 내용 및 이미지를 무단 전재, 재배포 또는 복사를 금지합니다.

인용 시 출처와 같이 공개해주세요!

도움이 되셨다면 댓글 또는 공감 부탁드립니다!

728x90
반응형

댓글