ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • System Hang과 Panic의 차이
    성능, 오해와 진실 2021. 1. 3. 18:25

     

    System Hang이라는 용어가 무분별하게 사용되는 경우가 많아 정리해본다.

     

    Hang

    • 커널 스스로 문제를 인식하지 못하여 시스템이 정지된 상태
    • 원인 분석이 어려움
    • 강제 Panic 가능

     

    Panic

    • 커널 프로그램 중 하나, panic()
    • 중대 결함 발생 시 시스템 자동 Reset (Dump 수행)
    • 문제 발생 시 Panic이 일어나지 않는 경우 대부분 Hang이 됨

     

     


     

     

    다음 사이트의 내용을 인용, 정리함 (cafe.naver.com/osschool/16)

     

    컴퓨터에 문제가 생겼을 때, 스스로 복구할 수 있는 방법이 있다면 얼마나 좋을까?

    마치, 사람 몸에 상처가 생겼을 때, 자연스레 아무는 것처럼..
    스스로 복구하는 이 기능은 이미 예전부터 사용하고 있던 것인데, 바로 패닉 (Panic)이다.

     

    1. panic

    패닉은 컴퓨터 내부의 일종의 커널 프로그램 중 하나이다. 커널은 시스템의 중요한 부분을 주기적으로 검사한다. 만일 시스템 내부에 크리티컬 한 결함이 발생되면, 이를 사용자에게 통지하고 시스템을 자동 Reset 한다. 왜냐하면 그 결함에 의해 다른 정상적인 부분까지 확대된다면, 돌이킬 수 없는 심각한 문제를 초래할 수도 있기에 해당 시점에 중단하는 것이다.

     

    예를 들어, File system의 Super block에 문제가 생겼을 경우를 가정해보자. 
    File system은 데이터를 보관하는 중요한 곳이므로, 문제 시 바로 중단하지 않고 내버려 둔다면 데이터에 손상을 입힐 수 있다. 즉, 한 곳의 문제가 더 큰 문제로 발전하기 전에 시스템을 바로 중단하는 것이다. 그런데, 그냥 중단해 버리면 사용자는 문제의 원인을 파악할 수가 없다. 그래서, 커널은 심각한 오류가 발생했을 때 내부의 커널 프로그램 중 panic()을 실행하여 다음과 같은 순서로 시스템을 reset 한다. (Solaris 기준)

      1) 모든 프로그램을 중지한다.
      2) 화면에 하얀 바탕 화면에 검정 글씨로 PANIC 원인을 표시한다.
      3) 계속해서 현시점에서 동작한 프로그램을 알 수 있는 stack과 register 정보를 화면에 표시한다.
      4) 메모리의 정보 중 커널 영역에 해당하는 부분을 swap 장치로 복사한다. 이것을 dump라고 하며 설정 옵션에 따라 메모리 전체의 내용을 특정 장치에 복사하도록 할 수 있다.
      5) 시스템을 reset 한다.
      6) Rebooting 하면서 swap에 복사된 정보를 /var/crash/HOSTNAME/ 아래에 파일로 저장하는데, unix.0 파일은 커널의 name list (변수명과 함수명)를 저장하고, vmcore.0 파일은 실제 메모리 내용을 파일로 저장하는데, 이 파일은 메모리 내용을 그대로 dump 하여 가져왔다 하여 vmcore 파일이라고 한다.
      7) mdb, scat, adb, crash 등의 Tool로 vmcore 파일을 분석하여 원인이 무엇인지 파악한다. 

     

    패닉이 된 것은 컴퓨터에 문제가 발생한 것이다. 그리고, 원인 분석이 가능한 덤프 파일이 생긴다. 그러나, 문제가 발생했음에도 불구하고, 패닉이 일어나지 않는 경우의 대부분은 행 (Hang)이다. 

     

    2. hang

    행은 말 그대로 정지 (중단)된 상태를 말하는데, 커널 자신이 스스로 시스템의 문제를 인식하지 못하여, 결국은 시스템 마비를 일으킨 상태다. 이런 경우에는 원인을 분석하기 쉽지 않다. 그러나, 이렇게 hang이 된 컴퓨터를 강제로 panic 하는 방법이 있다. (Solaris 기준)

     

    그것은 ok> 모드에서 'sync' 하는 방법이다.
    ok> mode에서의 sync는, panic처럼 메모리의 정보를 swap 장치로 dump 하고 강제로 reset을 해주는 기능이다. 간혹, OS 명령 'sync'와 혼돈하는 경우가 있는데, OS의 'sync' 명령은 mount 되어 있는 파일 시스템의 super block을 메모리와 디스크 간에 동기화하는 방법이고, ok> 모드에서의 'sync'는 강제 panic의 방법이므로 전혀 다르다.


    자바 애플리케이션 환경에서는 'kill -3'으로 스레드 덤프를 받고 그것을 Memory Analyzer로 분석하면 Hang이 되었을 당시, 어떠한 프로그램이 수행되었는지를 알 수 있다. 이때, 클래스뿐만 아니라 메쏘드 단위까지 볼 수 있기 때문에, 어떤 메쏘드를 수행하다 Hang이 걸렸는지를 파악해서 소스 코드의 오류를 짚어낼 수 있다.

     

    Hang은 다른 말로 'freeze' 또는 'get stuck'으로 표현하기도 한다.

    대개 시스템이 잠시라도 먹통 되면 '행 걸렸다'라고 하는데, 이는 행이 아니다. 행은 절대 돌아오지 않는다. 잠깐 중단되었다 풀리는 것은 행이 아닌 것이다.

     

     

    댓글

Designed by Tistory.