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 상태에 빠지는 경우
- 연결될 수 없는 NFS나 다른 원격 파일시스템과 통신하려는 경우
- 문제가 있는 하드 드라이브에 접근하려는 경우
- 비정상적인 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