반응형

최근 운영중인 웹서비스가 비규칙적으로 다운되는 현상이 있었는데, 발생했던 문제와 그 문제를 해결하는 과정에 대해서 포스팅을 해보려고 한다. 서버 운영을 하는 실무자들에게 도움이 되었으면 좋겠다.

문제 발생

첫 발생이 3월 초쯤 이었던가?.. 운영중인 웹 서비스가 종종 다운되는 현상을 겪었다. 운영 서버에 요청을 보내면 처리되지 않다가 결국 몇 분 뒤 Tomcat 서버가 죽어 위처럼 Service Unavailable 메시지를 띄었다.

보통 부하 분산과 장애에 대비해 WAS를 이중화 해놓기 때문에 WAS하나가 죽어도 다른 WAS가 처리해 줄껀데, 브라우저가 응답대기 상태도 아니고 Service Unavailable 을 띄운걸로 봐서는 WAS두개가 모두 죽은 것 같았다.

어떤 문제가 있었던걸까? 여태까지 악성쿼리때문에 DB 락 걸이 걸려 부하가 걸리는 장애는 종종 겪어 보았지만, 이번 케이스는 달랐다.

단서 1. CPU 사용률에 최대 부하 발생

해당 상황이 접수되고나서 바로 확인해보니 이중화 된 WAS 두개가 아예 삭선처리되어 모두 뻗어있었다. 그냥 Tomcat 서비스가 다운된 상태...

문제가 최초 발생 했을 시간대의 CPU사용량을 보니 WAS 2번이 기존 5~10% 내외로 사용하던 사용량이 어느 시점에 80%까지 올라가며 최대 부하가 걸려있었다. 5분 뒤 WAS 1번도 따라서 같은 현상을 보이기 시작했다.

보통 지연이 길거나, 부하가 강한 요청 중 단순 조회작업이라면 Kill을 해서 일단 서비스 복구를 하고 분석을 할텐데.. 이건뭐 톰캣이 다 죽어있으니 뭘 할수도 없고 ㅋㅋ당장 서비스 복구를 위해 WAS 재부팅밖에 답이 없었다. 그리고 바로 WAS 로그를 확인해봤다.

단서 2. java.lang.OutOfMemoryError: GC overhead limit exceeded

톰캣 로그를 확인하니, 발생 했을 때로 추정되는 시간때에 모두 java.lang.OutOfMemoryError: GC overhead limit exceeded 오류가 찍혀있었다.

GC에 대해서 간단하게 알아보고 넘어가보자. JVM은 메모리 확보를 위해서 GC를 수행한다. 대학 Java 시간에 잠깐 배웠던 그 GC가 맞다 바로 가비지 컬렉션(Garbage collection)이다. 더 이상 사용되지 않는 객체에 대해서 메모리를 해체해주면서 메모리 풀을 관리해주는 친구다.

근데 저 GC overhead limit exceeded 메시지는 왜 띄었는가..?

* GC를 진행하는데 CPU 98% 이상 사용

* GC 진행 후 메모리 2%미만이 복구 되었을 때

일단은 메모리가 부족했던 걸까? 생각이 들었다. 찾아보니, 위 문제에 직면한 경우 보통 JVM 옵션으로 힙 리밋 제한을 없애거나 메모리 사용량을 늘리라고들 하더라. 사실. 나는 이런 셋팅쪽 문제가 아닐거라고 개인적으로 생각은 들었지만, 팀 내부적으론 일단 메모리 부족으로 방향을 잡고, 톰캣, 자바 셋팅쪽을 손봤다.

하지만, 내 예상처럼 이런 증상은 셋팅으로 해결되지 않았다. 몇 일간 원인모를 이유로 서버는 다운됐다..ㅠ

그리고 GC 로그를 확인하기 위해서 서버에 GC로그를 남기는 설정도 추가하여 해당 문제가 발생했을 때 GC로그를 확인했으나, "GC 할껀데 메모리 없어~~~" 사실상 이런 내용만 도배되어있었다. 그런데 GC 시도 엄청 많이 했긴 했더라......암튼 이문제를 해결하는데 GC로그는 도움되지 않았다..

단서 3. 특정 요청에 문제가 생기는 것은 아니었다.

이게 어떤 특정요청에만 생기는 현상일까 생각이 들었다. 머 배치가 돌때 먼가 잘못 도는게 있는걸까? 아니면 사용자가 이상한 파라미터를 던져서 처리를 못하나...? 신기하게도 새벽에는 이런일이 발생하질 않네?.. 해서 의심이 갔었다.

문제가 발생했었을 때의 로그를 확인했으나, 공통점은 없었다. 심지어 GC error 가 발생한 해당 요청을 같은 파라미터를 넣고 다시 요청해도 같은 현상은 발생하지 않았다.

결론부터 말하자면, 특정한 요청이 문제가 됐었다. 다만, 내가 바로 찾지 못한 이유는, 이미 문제가 발생한 이후에 로그에 찍힌 GC error 로그에만 집착했기 때문이었다. 일단은 GC error 로그가 어떤 요청에 찍혔다 하더라도, 그 요청이 문제가 아니라는 거다. 이미 문제는 발생했고, 우연히 그 요청을 처리중일 때 GC 가 동작하여 error 을 띄운거란거다.

만약 이방법으로 간단하게 볼려면, GC Limit 이 발생하기 전 로그들을 뒤져봐야 한다.

이런 현상이 지속되고, 팀원들이 이 문제를 해결하기 위해 이미 붙어있었기 때문에, 내 업무를 좀 쳐내고 나중에 시간이 남으면 보려고 생각했다. 뭐 그때쯤 가서 이미 해결이 되면, 좋은거긴 한데, 나는 셋팅쪽 문제가 아닐꺼란 생각이 계속 들었다.

단서 4. 힙메모리 사용량 증가

시간적 여유가 생겨 다시 문제를 분석해봤다. 보니까 해당 문제가 발생 했을 때 CPU사용량도 돌라갔었지만, 힙 메모리 사용량도 폭발적으로 증가하는 현상이 확인되었다.

왜 처음부터 힙메모리 관제에 신경쓰지 않았을까, 평소에 악성쿼리처럼 CPU를 많이 점유하던 장애를 주로 만났었기 때문에 메모리보다는 CPU 사용량이나 어떤 요청이 왔는지 이런거 위주로 봤던게 좀 방심했던 것 같다.

원래 힙메모리 사용량의 이상적인 그래프는 맨 아래 그래프처럼 어느정도 메모리가 올라가다 GC가 작동하여 떨어지고, 계속 반복하여 적정한 수준을 유지하는게 이상적이다.

하지만 위 사진을 보다시피 3월 16일동안 3회나 01번 02번 WAS 힙메모리 점유율이 급격하게 올라가는 것을 볼 수 있다.

문제 해결을 위한 방향성 잡기

자 여기까지 정리를 해보자.

1. 새벽이 아닌 주야간 워크 타임때, 그리고 불특정, 비규칙적인 시간에 서버가 다운이 된다.

2. CPU 사용량과 힙 메모리 점유율이 급격히 상승한다.

3. 서버 에러 로그에는 GC overhead limit exceeded 이 발생한다.

자 일단 에러로그에 GC 할 메모리가 부족하다고 되어있어서 GC에만 문제가 있었던건가 여기에만 집중했지만, 내 생각에는 이건 메모리가 부족해지고 나서, 즉 어떤 문제가 발생하고 그 이후에 파생된 현상이지 주 원인은 갑작스럽게 메모리를 차지한 어떤게 있을거라고 생각했다.

즉, 어떤 원인에 의해 메모리가 급격하게 사용되었고, 그 이후에 평소처럼 GC를 하려니 GC 리밋 로그를 띄운 것 이다. 나도 그랬지만, 보통 다른 사람들도 이 GC 리밋 에러 로그를 보고, 왜 GC 리밋 로그를 띄었을까..? 검색해보면 "서버 힙메모리가 부족하네요 ㅎㅎ" 이럴텐데 이렇게 접근해서는 해결 할 수 없는 문제였다. (내 케이스의 경우)

자. 정리하자면 GC 관련된 문제가 아닐꺼다, 무언가가 힙메모리를 엄청나게 차지하니까, 당연히 GC도 못하니 저 오류를 띄운거고, 우리는 앞으로 어떤 녀석이 힙메모리를 그 순간에 차지하고 있었는지를 찾아야한다.

앞으로 해야할게 바로 힙메모리 분석이다. 다음 포스팅을 통해서 힙메모리 분석을 어떻게 했고, 어떤게 원인이었으며, 어떻게 조치했는지에 대해서 알아보자

 

#톰캣 #WAS #오류 #다운 #종료 #꺼짐 #GC #overhead #limit #Exceeded #메모리릭 #메모리누수 #힙 #힙메모리 #메모리 #사용량 #점유률 #급등 #증가 #서버 #장애 #트러블 슈팅

반응형
반응형

 

스프링 프로젝트에 Maria DB를 사용하기 위해서 설치해보자! Maria DB는 MYSQL DB개발자들이 나와서 만든 "무료" 오픈소스 DB라고 생각하면 된다!

 

성능이 뛰어난 Oracle, MSSQL은 라이센스가 없어 우리가 사용하지 못하니 무료 DB를 사용하자! 우리같이 뭐 간단한 DB 조회는 크게 성능차이를 체감하지 못할것이니 그냥 사용하면 된다!

 

1. 설치파일 다운

 

https://downloads.mariadb.org/

 

Downloads - MariaDB

 

downloads.mariadb.org

 

마리아 다운 페이지로 들어가보자.

 

 

최신버전으로 다운버튼을 눌러주자. 10.5버전!

 

 

자 본인 OS 아키텍쳐에 맞게 .msi 파일로 받아주면 된다. 난 윈도우 64비트를 사용하니 64bit 다운파일 클릭!

 

 

  그럼 머 이런 페이지로 넘어왔다가 저 페이지에서 한 20~60초 정도 기다리면 회원가입 페이지로 넘어가는데 나는 그냥 파일만 받을것이기 때문에 저 here버튼을 눌러 파일을 다이렉트로 다운받아주자.

 

 

뚜뚠! 파일 다운완료했으니 설치해주자.

 

 

자 쭉쭉 넘어가자

 

 

1. root(관리자) 계정의 비밀번호를 설정해주자

2. 기본 문자열셋을 UTF-8로 설정할 거냐는 물음에 체크해주자.

3. 다음으로 넘어가고

4. 이제 DB서비스가 돌아갈텐데 그 서비스의 이름을 지정할 수 있다. 난 그냥 뒀다.

5. DB포트도 설정할 수 있는데 3306이 국룰이기 때문에 그냥 뒀다.

6. 버퍼 사이즈인데 그냥 뒀다.

7. 다음으로 넘어가고

8. 인스톨을 해주자.

 

 

인스톨 완료 ㅎㅎ

 

설치 확인

 

 

 

  자 윈도우키를 누르거나 시작버튼을 눌러서 검색창을 활성화 시키고 "MY"라고 검색하면 MySql Client (MariaDb 10.5 (x64))라는 프로그램이 설치됐당. 그걸 실행해보자.

 

 

DB root 계정 접속 비번을 묻는데 아까 설정한 비번을 치고 엔터를 눌러주자.

 

 

접속에 성공했다 ㅎㅎ 테이블을 한번 보자!

"show databases;" 를 입력하고 엔터를 눌러보자

 

 

뚜둔! 정상적으로 데이터 베이스 조회에 성공했다. 머 여기서 크게 할건 없지만, DB가 동작하고 있다는 것이다..

 

서비스 구동 확인

 

  자 이제 내컴퓨터가 켜지면 눈에는 보이지 않지만 뒷단에서 Maria DB서비스가 돌고 있을 것이다. 이걸 어디서 확인하는지 알아보자.

 

 

먼저 윈도우 키를 누르고 "서비스"를 검색해보자 그럼 앱이 검색되는데 엔터버튼을 눌러 실행!

 

 

  그럼 서비스들이 뜰텐데 Maria DB를 찾아보자. 아까 우리가 설정한 서비스 이름으로 등록된다. 1번을 보면 지금 실행중인 것으로 나타난다. 만약 Maria DB서비스를 끄고 싶으면 해당 줄을 오른쪽마우스하고 중지 혹은 일시중지를 눌러주면 된다.

 

  시작유형도 보면 자동으로 되어있는데 이건 시스템 부팅시 자동으로 서비스를 동작시키겠다는 것이다. 본인이 수동으로 키고 끄고 싶으면 똑같이 오른쪽마우스를 눌러 설정해주면 된다.

 

#스프링 #마리아DB #mariaDB #설치 #무료DB #RDBMS #스프링 #서비스 #확인 #다운 #다운로드

 

 

 

 

반응형
반응형

 

준비물
1. 4,500원
2. 8GB이상의 USB메모리

 

 

 

  새 컴퓨터를 샀다. 당연히 지출을 아끼려고 Free-DOS모델을 구매했다. 여기서 Free-DOS모델이란, PC에 운영체제를 포함하지 않고 파는 제품을 말한다. 보통 우리가 컴퓨터를 사면 윈도우 까지 깔려있어서 전원 버튼만 누르고 바로 사용하면 되나, 이 제품에는 아무것도 깔려 있지 않은 상태로 온다.

 

  때문에 사용자가 직접 OS설치를 해야하고, 파일을 어디서 구하던지, 시디키는 있는지 그런건 PC판매자가 고려하지 않아도 된다. 오직 구매하는 사용자가 알아서 하는 것일뿐...

 

  그렇다면 장점은 무슨 장점이 있기때문에 Free-DOS 모델을 사는 것일까?

 

Free-DOS 모델 구매시 약 150,000원 절감

 

  결론 부터 돈을 아낄 수 있다는 것이다. 우리가 윈도우가 탑제된 PC를 구매하면 거기에 이미 윈도우 OS값이 포함되어 있는 것이다. 당연히 PC제조사도 마이크로소프트에 돈을내고 윈도우를 사와서 PC에 설치해서 파니까 라이센스 비용을 지불하는 것이고 고스란히 소비자에게도 그 가격이 돌아오는 것이다.

 

  통상적으로 윈도우 OS정품을 사면 10~20만원 언저리 금액을 지불해야하나, 윈도우가 탑제되지 않은 모델은 그 비용을 내지 않기 때문에 윈도우가 탑제된 동일 PC보다 10~20만원을 아낄 수 있는 것이다. 따라서 본인이 OS설치만 해결 할 수 있다면 조금이나마 싸게 살 수 있다는 것이다.

 

  OS는 사용자가 설치

 

돈아낄 수 있다는건 그렇다 치고, 이제 어떻게 다운받을 것이며, 어떻게 인증을 받을 것인가. 이 두가지 문제에 직면한다. 그리고 OS가격이 15만원이라면서 어차피 내가 그돈 내고 구매해야하는거 아니야!? 라고 생각할 수도 있을 것이다. 실제로 10~20년 전에는 진짜 저 돈을 주고 샀어야 했으나 지금은 살짝 다른 방식으로 4~5000원이라는 금액만 지불하면 정상적으로 정품인증이 가능하다.

1. Window 10 소프트웨어 구매

 

 

 

  자 네이버에 윈도우 10이라고 검색해보자 그럼 한 3만원 부터 10만원 이상까지 엄청 많은 제품들이 검색된다. 일단 이건 너무 비싸다. 넘어가자.

 

 

  쿠팡에서 윈도우 10을 검색해보자. 먼가 사기꾼들 같은 가격의 제품들이 검색된다. 아니 무슨 윈도우가 4500원이야

ㅡㅡ 할 수 있겠지만, 이해한다.. 나도 과거에 그 감정들을 느꼈었다.. 하지만 저거 뭐 사기는 아니다.

 

  저렇게 저렴한 이유는. 저 윈도우 라이센스가 다르기 때문이다.

 

  - FPP (Full Package Product) : 실물 USB or CD로 설치 가능한 패키지

  - ESD (Electronic Software Distribution) : 설치파일은 공홈에서 받고 시디키만 발급받는 형태

  - DSP (Delivery Service Parck) = COEM : 한 메인보드에 귀속되는 형태, 메인보드 교체시 라이센스 소멸

  - OEM (Original Equipment Manufacturing) : PC제조할때부터 설치되서 나오는 형태 = 대기업 PC

 

  위 라이센스중 저 몇천원 짜리 라이센스는 ESD 라이센스 제품이다. 즉 실물도 없고 설치파일도 마이크로소프트웨어 공홈에 있으니 걍 이메일로 씨디키만 불러주면 되는거라서 애초에 가격이 저렴하기도하나, 저정도 가격으로 나오는 씨디키들은 아마 다른 편법이 있는 것 같기는 하다. 내생각에는 물가가 낮아 OS가격이 아주 저렴하게 책정되는 아프리카에 있는 나라에서 대량으로 구매한 라이센스들을 파는 것 같다.

 

  설명이 많았으나, 뭐 맘에드는 걸 구매한다. 나는 윈도우10 Pro로 구매했다. 홈 에디션이나 프로페셔널로 사도 상관은 없으나, 윈도우의 기능을 최대한 제한없이 이용하려면 최상위 트림인 Pro를 사는것이 좋다. 참고로 윈도우 10 Pro의 FPP 패키지는 정가가 33만원쯤 한다.. ㅠㅠ

 

 

  저런 사항들도 있다고 하니 충분히 고려하고 구매하길 바란다.

 

 

  구매할 때 저 이메일 쓰는 칸이 있으니 꼭 3번이상 다시 확인해서 이메일주소에 이상이 없는지 보고 진행하길 바란다. 오타나서 다른 메일로 가면 속이 뒤집어질지도 모른다.

 

 

  그리고 본인 이메일을 보면 이렇게 라이센스 키를 보내준다. 뭔가... 메일이 무슨 프리메이플 홍보 전단지도 아니고 ㅋㅋ.. 귀엽다.. 나는 구매하고 한 5분 뒤에 메일이 왔는데 어떤 판매자는 이거 다음날 발송해주기도하고 판매자마다 좀 다름으로 구매하기 전에 상품평을 보고 사면 좀 도움된다. 언제 보내줄꺼냐는 글 도배되어있으면 거르시길..

 

  자 여기까지 소프트웨어 구매는 끝났다..

 

2. Window 부팅디스크 만들기

 

 

 

 

  1. 8GB이상의 USB메모리를 컴퓨터에 삽입하고, 내컴퓨터에서 해당 USB 디스크에 오른쪽마우스 클릭후 포맷버튼을 눌러준다.

  2. 포맷화면이 나오면 포맷 옵션에 빠른 포맷이 선택 되어있나만 확인하고 시작 버튼을 누른다. 뭐 본인이 원하는 포맷 형식이 있다면 지정해도 상관은 없다.

 

  USB 메모리 포맷이 완료되면 뺏다 꽂아서 컴퓨터에 인식이 잘 되나 확인하고 꽂은 상태로 두고 이제 설치파일을 받아보자.

 

https://www.microsoft.com/ko-kr/software-download/windows10%5C

 

Windows 10 다운로드

Windows 10용 ISO 파일을 다운로드한 경우, 해당 파일은 선택한 위치에 로컬로 저장됩니다.컴퓨터에 타사 DVD 굽기 프로그램이 설치되어 있으며 해당 프로그램을 사용하여 설치 DVD를 만들려는 경우,

www.microsoft.com

  위 페이지에 접속한다.

 

 

  밑에 보면 지금 도구 다운로드 버튼이 있다. 눌러주자.

 

 

  위 파일이 다운받아졌다. 실행해보자.

 

 

 

  1. 문제가 생길 수가 없는 가장 쉬운 단계이다. 동의 버튼을 눌러주자.

  2. 그냥 다음을 누르지 말고 두번째 버튼인 "다른 PC용 설치 미디어 만들기" 버튼을 눌러준다.

 

 

 

  1. 이 화면은 저 빨간 원부분 체크를 "해제"하고 원하는 언어, 에디션, 아키텍처를 골라준다. 그다음 다음버튼 클릭,

  2. 여기서 USB 플래시 드라이브를 클릭하고 다음!

 

 

 

  1. 꼽아놨던 USB드라이브를 선택해주고 다음 버튼을 눌러주자.

  2. 진행되는 것을 확인하자

 

 

  부팅디스크 제작이 완료되면 해당 USB 디스크 폴더에 가보면 저런 파일들이 생성되어있다. 그럼 성공!

3. 윈도우 설치

 

  자 이제 새로산 PC에 윈도우를 설치해보자. 먼저 새로산 PC에 방금 만든 윈도우 부팅디스크 USB를 설치하려는 PC USB포트에 꼽고 컴퓨터 부팅을 시킨다.

 

 

  보통 요즘 나오는 컴은 자동으로 USB 포트가 윈도우 부팅보다 순서가 먼저로 셋팅되어있어서 문제가 없다면 윈도우 설치 화면이 나타난다.

 

  만약 저렇게 되지 않는다면 수동으로 부팅 순서를 설정해줘야한다. 보통 BIOS셋업 메뉴에 들어가서 부팅순서를 USB를 위로 설정시키는데 이게 메인보드 종류, 제조사에 따라 BIOS셋업 메뉴에 들어가는 키도 다르고, 들어가서 설정하는 방법도 다 제각각이기 때문에 이부분은 "부팅 순서 변경"을 검색해서 해결해보자!

 

 

 

 

  요기까지 나왔다면 이제 설치만 하면 된다.

 

 

 

  1. 계속 다음을 누르다보면 CD키 입력하는 화면이 나오는데 우리가 구매했던 CD키를 입력해주자! 해당 CD키를 입력하면 해당 CD키에 맞는 버전으로 OS를 설치해준다. = Window 10 Pro 시디키다! 하면 Pro를 알아서 설치해준다는 뜻!

 

  2. 계속 넘어가다 보면 해당 화면이 나오는데 저기서 "사용자 지정 : Windows만 설치(고급)" 버튼을 눌러 계속 넘어가준다.

 

 

  PC의 하드디스크 구성에따라 목록이 다를 수 있음.

  이제 파티션을 설정하는 화면이 나타나는데, 파티션 구분 없이 그냥 쓸꺼면 새로 만들기를 눌러서 볼륨 할당을 시키면 된다.

 

 

 

  새로만들기를 누를경우 크기를 정할 수 있는데 최초에는 그 파티션의 최대 크기로 할당되어 있다. 보통은 그냥 저 최대크기로 적용을 누르면 된다.

 

  이렇게 파티션하나 쓰는사람은 이렇게 하나만 만들어도 되고, 파티션 나눌 사람들은 저렇게 파티션을 나누면된다. 그리고 어차피 윈도우 설치 이후에도 이 파티션과 볼륨 조절은 할 수 있으니, 계획이 없다면 일단 넘어가도 된다.

 

 

  그리고 많이 실수하는 것중에..저 파랗게 선택된 파티션에 윈도우가 설치되지 실수하지 말자.. 나는 시스템 파티션/ 자료파티션 나눠놓고.. 모르고 자료 파티션 선택된채로 설치하는 실수를 저질렀다..

 

 

 

 

  1. 계속 진행을 하면 이제 실제로 윈도우를 설치한다. 기다리자

  2. 설치가 완료되면 재부팅이 된다. 보통 좋은 PC면 이번엔 설치된 윈도우를 띄우는데 또 설치화면이 나왔다면 꽂혀있는 USB를 제거하고 재부팅하자.

 

 

 

  1. 이후 이런 화면들이 나오는데, 여기서부턴 개인 설정을 해주면 된다.

  2. 쭉쭉 넘어오면 바탕화면이 나온다.

 

 

  여기까지 윈도우10 Pro 설치 끝!

 

#부팅디스크 #만들기 #윈도우10 #윈도우10Pro #설치 # 다운 #방법 # FreeDOS #라이센스 #ESD #종류

 

반응형

+ Recent posts