운영체제 신입 트러블슈팅 면접

운영체제 신입 · 취준 (0~1년) 트러블슈팅 5문항 조회수 31 · 2026-08-26 (수) 07:40:58
1 메모리 관리
Easy

Q. 애플리케이션이 실행 중에 갑자기 'Segmentation Fault' 에러를 발생시키며 종료되었습니다. 이 에러가 발생하는 주요 원인은 무엇이며, 어떤 상황에서 이런 문제가 발생할 수 있는지 설명해주세요.

프로세스가 접근 권한이 없는 메모리 영역에 접근하려 할 때를 생각해보세요.

A. 모범답안

Segmentation Fault는 프로세스가 허용되지 않은 메모리 영역에 접근하려 할 때 발생하는 에러입니다. 주요 원인으로는 초기화되지 않은 포인터를 사용하거나, 이미 해제된 메모리에 접근하거나, 배열의 범위를 벗어난 인덱스에 접근하는 경우가 있습니다. 또한 NULL 포인터를 역참조하거나, 읽기 전용 메모리 영역에 쓰기를 시도할 때도 발생합니다. 이는 운영체제의 메모리 보호 기능이 작동하여 잘못된 메모리 접근을 차단하는 것입니다. 디버깅 도구나 코어 덤프 분석을 통해 문제가 발생한 코드 위치를 파악할 수 있습니다.

핵심 포인트
  • • 허용되지 않은 메모리 영역 접근
  • • 포인터 오류(NULL, 미초기화, 해제된 메모리)
  • • 배열 범위 초과
  • • 메모리 보호 기능
답변에 넣으면 좋은 키워드
Segmentation Fault 메모리 접근 위반 포인터 메모리 보호 NULL 포인터 코어 덤프
실무에서는

C/C++ 애플리케이션 개발 시 포인터 오류로 인한 프로그램 크래시를 디버깅할 때 필수적인 지식입니다.

Follow-up 질문

Segmentation Fault와 Bus Error의 차이점은 무엇인가요?

2 프로세스 관리
Medium

Q. 서버에서 특정 프로세스가 응답하지 않고 멈춰있는 상태(Hang)입니다. top 명령어로 확인했을 때 해당 프로세스의 상태가 'D' 상태로 표시되고 있습니다. 이 상태가 의미하는 것과 발생 원인, 그리고 해결 방법을 설명해주세요.

D 상태는 인터럽트 불가능한 대기 상태를 의미하며, 주로 I/O 작업과 관련이 있습니다.

A. 모범답안

D 상태는 Uninterruptible Sleep 상태로, 프로세스가 I/O 작업 완료를 기다리며 인터럽트나 시그널로도 깨울 수 없는 상태입니다. 주로 디스크 I/O, NFS 마운트 응답 대기, 하드웨어 장치 응답 대기 등에서 발생합니다. 이 상태가 지속되면 디스크 장애, 네트워크 스토리지 연결 문제, 커널 버그 등을 의심해야 합니다. 해결 방법으로는 먼저 dmesg나 /var/log/messages를 확인하여 I/O 에러를 찾고, iostat이나 iotop으로 디스크 상태를 점검합니다. NFS 문제라면 마운트를 해제하거나 서버 재부팅이 필요할 수 있으며, 하드웨어 문제라면 디스크 교체를 고려해야 합니다.

핵심 포인트
  • • Uninterruptible Sleep 상태
  • • I/O 작업 대기
  • • 디스크/NFS/하드웨어 문제
  • • dmesg, iostat 등 진단 도구 활용
답변에 넣으면 좋은 키워드
D 상태 Uninterruptible Sleep I/O 대기 디스크 장애 NFS dmesg iostat
실무에서는

서버 운영 중 디스크 장애나 NFS 문제로 프로세스가 멈춰있을 때 원인을 진단하고 해결하는 데 필요한 지식입니다.

Follow-up 질문

프로세스 상태 중 Z(Zombie) 상태는 무엇이며, 어떻게 처리해야 하나요?

3 메모리 관리
Medium

Q. 리눅스 서버에서 애플리케이션이 'Out of Memory' 에러로 종료되었습니다. free 명령어로 확인했을 때 여유 메모리가 충분히 있는 것처럼 보이는데도 이런 현상이 발생했습니다. 이런 상황이 발생할 수 있는 원인과 어떻게 진단할 수 있는지 설명해주세요.

가상 메모리와 물리 메모리의 차이, 그리고 프로세스별 메모리 제한을 생각해보세요.

A. 모범답안

Out of Memory 에러는 물리 메모리가 충분해도 여러 이유로 발생할 수 있습니다. 첫째, 프로세스별 메모리 제한(ulimit)이 설정되어 있어 특정 프로세스가 더 이상 메모리를 할당받지 못할 수 있습니다. 둘째, 32비트 시스템에서는 프로세스당 주소 공간이 제한되어 있습니다. 셋째, 메모리 파편화로 인해 연속된 큰 메모리 블록을 할당하지 못할 수 있습니다. 진단 방법으로는 ulimit -a로 제한값을 확인하고, /var/log/messages에서 OOM Killer 로그를 확인하며, cat /proc/meminfo로 메모리 상세 정보를 분석합니다. 또한 특정 프로세스의 메모리 사용량은 /proc/[pid]/status에서 확인할 수 있습니다.

핵심 포인트
  • • 프로세스별 메모리 제한(ulimit)
  • • 주소 공간 제한
  • • 메모리 파편화
  • • OOM Killer 로그 확인
답변에 넣으면 좋은 키워드
Out of Memory ulimit OOM Killer 메모리 파편화 /proc/meminfo 가상 메모리
실무에서는

컨테이너 환경이나 제한된 리소스에서 애플리케이션 실행 시 메모리 부족 문제를 진단하고 해결하는 데 필요합니다.

Follow-up 질문

OOM Killer가 어떤 프로세스를 먼저 종료시키는지 선택 기준을 설명해주세요.

4 CPU 및 성능
Easy

Q. 서버의 CPU 사용률이 100%에 가깝게 치솟아 시스템이 느려졌습니다. top 명령어를 실행했을 때 어떤 정보들을 확인해야 하며, CPU 사용률이 높은 원인을 어떻게 파악할 수 있는지 설명해주세요.

사용자 영역과 커널 영역의 CPU 사용률, 그리고 개별 프로세스의 CPU 점유율을 구분해서 봐야 합니다.

A. 모범답안

top 명령어에서 먼저 상단의 CPU 사용률 라인을 확인하여 us(user), sy(system), wa(I/O wait) 값을 파악해야 합니다. us가 높으면 애플리케이션 로직 문제, sy가 높으면 시스템 콜이나 커널 작업 과다, wa가 높으면 디스크 I/O 대기 문제입니다. 프로세스 목록에서 %CPU 컬럼을 확인하여 어떤 프로세스가 CPU를 많이 사용하는지 식별합니다. 특정 프로세스가 원인이라면 해당 프로세스의 로그나 스택 트레이스를 확인하고, 무한 루프나 비효율적인 알고리즘이 있는지 점검합니다. 여러 프로세스가 동시에 높다면 시스템 전체 부하를 줄이거나 스케일 아웃을 고려해야 합니다.

핵심 포인트
  • • us, sy, wa 구분
  • • 프로세스별 CPU 사용률 확인
  • • 무한 루프나 비효율적 로직 점검
  • • 로그 및 스택 트레이스 분석
답변에 넣으면 좋은 키워드
CPU 사용률 top user time system time I/O wait 프로세스 모니터링
실무에서는

서버 성능 저하 시 원인을 빠르게 파악하고 대응하는 초기 진단 과정에서 필수적으로 사용됩니다.

Follow-up 질문

Load Average 값은 무엇을 의미하며, CPU 개수와 어떤 관계가 있나요?

5 동기화 및 병렬성
Medium

Q. 멀티스레드 애플리케이션에서 간헐적으로 데이터 불일치 문제가 발생합니다. 같은 입력에 대해 때로는 정상 결과가 나오고 때로는 잘못된 결과가 나옵니다. 이런 비결정적 버그의 원인과 디버깅 방법, 그리고 해결 방안을 설명해주세요.

여러 스레드가 공유 자원에 동시에 접근할 때 발생하는 경쟁 상태를 생각해보세요.

A. 모범답안

이는 전형적인 Race Condition(경쟁 상태) 문제로, 여러 스레드가 공유 데이터에 동시에 접근하여 읽기/쓰기 순서가 보장되지 않을 때 발생합니다. 비결정적으로 나타나는 이유는 스레드 스케줄링 타이밍에 따라 실행 순서가 매번 달라지기 때문입니다. 디버깅 방법으로는 Thread Sanitizer 같은 도구를 사용하거나, 로그에 타임스탬프와 스레드 ID를 기록하여 실행 순서를 추적합니다. 해결 방안으로는 뮤텍스나 세마포어 같은 동기화 기법을 사용하여 임계 구역을 보호하거나, 원자적 연산을 사용하거나, 스레드 안전한 자료구조를 활용합니다. 근본적으로는 공유 상태를 최소화하는 설계가 중요합니다.

핵심 포인트
  • • Race Condition
  • • 공유 자원 동시 접근 문제
  • • 뮤텍스/세마포어 동기화
  • • Thread Sanitizer 활용
답변에 넣으면 좋은 키워드
Race Condition 경쟁 상태 동기화 뮤텍스 세마포어 Thread Sanitizer 원자적 연산
실무에서는

웹 서버나 데이터베이스 같은 멀티스레드 환경에서 동시성 버그를 진단하고 수정하는 데 필수적인 지식입니다.

Follow-up 질문

뮤텍스와 세마포어의 차이점은 무엇이며, 각각 어떤 상황에서 사용하나요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!