OS(운영체제)/리눅스(Linux)

D-State → Uninterruptible sleep 프로세스 상태

hippo 데브옵스 2024. 3. 30. 21:08

D state란

  • process 상태(STAT)가 D로 표시되는 process는 "uninterruptible sleep" 상태를 의미
  • 일반적으로 I/O에 대해 대기하는 것으로 다른 어떤 일도 할 수 없는 상태 → I/O operation이 완료되기 전까지는 죽은 상태
  • D 상태인 process들은 operation이 완료되어 R/S(Run/Sleep)에 돌아가기 전까지 보통 작은 시간동안(a fraction of a second)만 거기에 있음
     
  • 서버가 I/O 집약적인 작업(intensive operations)을 수행할 때 프로세스가 "D" 상태로 표시되는 것은 정상 
  • 성능이 문제가 되는 경우 디스크의 상태를 확인 필요
  • 펌웨어 및 커널 디스크 드라이버가 업데이트되었는지 확인필요

 

  • process가 D 상태에 빠지는 경우
    1. 연결될 수 없는 NFS나 다른 원격 파일시스템과 통신하려는 경우
    2. 문제가 있는 하드 드라이브에 접근하려는 경우
    3. 비정상적인 device 드라이버를 이용해 하드웨어를 사용하려고 경우

 

  • D state process는 uninterruptible sleep으로 I/O를 대기 중 상태
    • ps 명령어는 uninterruptible sleep의 process에 대해 "D"를 표시 
    • vmstat 명령어는 "blocked" 상태이거나 "waiting on I/O" process를 표시 
    • "D" state Process는 SIGKILL 또는 kill -9를 사용해도 중단할 수 없음 → 서버를 재부팅하거나 I/O가 응답할 때까지 기다려야만 지울 수 있음

 

  • Uninterruptible sleep 상태는 D state의 process로 아무것도 할 수 없는 상태
    • process는 일반적으로 D State를 오래 유지하지 않음
    • D State process가 쌓여 있으면 시스템의 일부 로직이 중단됨
    • ps 명령어에 l 옵션 추가하여 긴 포맷으로 출력 → 우선순위와 관련된 PRI와 NI값 확인 가능  
    • WCHAN 열에는 process가 sleeping인 커널 함수의 이름이 표시
      $ ps axl | awk '$10 ~ /D/'
      F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
      vass     13478  7.2  0.0   1732   624 pts/1    D+   17:36   0:00 find ./​

 

process STAT(프로세스 상태)

  • Linux의 process는 running, sleeping 등 여러 가지 상태가 될 수 있음
  • Running process는 방금 CPU에서 실행 중이고, Sleeping process는 CPU가 켜지거나 다른 이벤트가 발생할 때까지 기다리는 상태를 의미
  • ps 명령어를 사용하면 시스템에서 각 process의 상태에 대한 정보를 얻을 수 있음
     
  • ps 명령어의 STAT 열에 표시
    • 큰 S는 Sleeping을 의미
    • 작은 s는 process이 session leader을 의미 → process가 새로운 session을 생성하면 해당 process는 session leader가 됨(Session Process의 PID = Session ID)
    • 큰 R은 Running을 의미
    • +는 foreground process를 의미
      $ ps a
        PID TTY      STAT   TIME COMMAND
       4975 tty1     Ss+    0:00 /sbin/mingetty tty1
       4976 tty2     Ss+    0:00 /sbin/mingetty tty2
       6202 pts/0    Ss+    0:01 -bash
      10312 pts/1    Ss     0:00 -bash
        639 pts/1    R+     0:00 ps a​

 

참고 자료 : Processes in D state - OpenVZ Virtuozzo Containers Wiki

참고 자료 : [Linux] Uninterruptible sleep 프로세스 상태 D :: TOP GUN (tistory.com)

참고 자료 : Processes in an Uninterruptible Sleep (D) State | Support | SUSE