안녕하세요. 주식회사 서버몬 입니다.
오늘은 Linux 계열의 서버를 운영하시며 보실 수 있는 좀비 프로세스에 대해서 알아보도록 하겠습니다.
일반적인 운영 시 좀비 프로세스는 드물게 발생하지만 좀비 프로세스의 개념과 발생원인, 발견 시
처리 방법과 임의로 생성하는 실습 방법까지 설명하도록 하겠습니다.
※ 이번 컨텐츠 자료는 서버몬의 유지보수 고객사 중 좀비 프로세스가 발생한 서버를 기준으로
작성 되었습니다.
좀비 프로세스 (Zombie Process) 란?
- 프로세스가 종료 될 때, 마지막 문장의 실행을 끝내고, exit() 시스템 호출을 사용하여
운영체제에게 자신의 삭제를 요청하면서 종료 됩니다.
이 시점에서, 프로세스는 자신의 부모 프로세스가 호출한 wait() 시스템 호출을 통해서
상태 값을 반환할 수 있고 물리 메모리와 가상 메모리, 열린 파일, 입출력 버퍼를 포함한
프로세스의 모든 자원이 운영체제로 반납되게 됩니다.
부모 프로세스는 wait() 시스템 호출을 사용하여 자식 프로세스가 종료할 때를 기다릴 수 있고,
부모가 자식의 종료 상태를 얻어 낼 수 있도록 하나의 인자를 전달 받는다. 이 시스템 호출은 부모가
어떤 자식이 종료되었는지 구별할 수 있도록 종료된 자식의 프로세스 식별자를 반환 합니다.
프로세스가 종료되면 사용하던 자원은 운영체제 (OS) 가 되찾아가게 된다. 그러나 프로세스의
종료 상태가 저장되는 프로세스 테이블의 해당 항목은 부모 프로세스가 wait()을 호출할 때까지 남아있게 됩니다.
따라서 종료가 되었지만 부모 프로세스가 아직 wait() 호출을 하지 않은 프로세스를 좀비 (zombie) 프로세스
라고 합니다.
모든 프로세스는 종료하게 되면, 좀비 상태가 되지만 아주 짧은 시간 동안 머무르게 되고, 부모가 wait()를
호출하면 좀비 프로세스의 프로세스 식별자와 프로세스 테이블의 해당 항목이 운영체제에 반환 됩니다.
좀비 프로세스는 추가적으로 시스템 리소스를 소모하지는 않으므로, 다수의 많은 갯 수가 활성화 된 상태가
아니라면 꼭 바로 조치하지는 않아도 됩니다.
좀비 프로세스 확인 및 조치
- 서버를 점검할 때에 현재 사용량 등을 확인하기 위해 top 명령어를 사용 합니다.
해당 화면에서는 서버가 작동한 시간, CPU 및 Memory 사용량, 작동중인 프로세스 들을 확인할 수 있습니다.
작동상태를 확인 중 3개의 좀비 프로세스가 작동 중인 사항을 확인 하였습니다.
- 이렇게 먼저 확인된 좀비 프로세스는 별도의 필터 명령어를 통해 추가로 확인이 가능 합니다.
1) ~]# ps aux | egrep "Z|defunct"
상태가 Z (Zombie) 와 defunct 를 모두 가지고 있는 PID 및 프로세스를 확인 합니다.
soffice.bin 과 관련된 프로세스가 좀비 프로세스 상태로 남아 있습니다.
2) ~]# ps -f 14370 (해당 PID)
위에 리스트 된 3개의 PID 중 하나만 먼저 예시로 입력 해 봅니다. 위와 같이 입력 시 부모 프로세스의
PID를 함께 확인할 수 있습니다. 아래 스크린샷에서는 해당 좀비 프로세스의 PID인 14370의 부모 프로세스의
PID (PPID) 가 14341 인 것을 확인할 수 있습니다.
3) ~]# ps axo pid.ppid.comm | grep -w "<defunct>"
간결하게 원하는 정보만 보기 위하여, defunct 상태인 프로세스들의 PID와 PPID를 확인할 수 있습니다.
검색된 내용을 보면 PID 14370의 부모 프로세스의 PID는 14341, PID 14373의 부모 프로세스의 PID는 14330임을
확인할 수 있습니다.
4) ~]# kill -9 14341 (위에 검색된 좀비 프로세스 PID의 부모 프로세스 PID)
자식 프로세스를 종료 시키기 위해 부모 프로세스를 종료 시킵니다.
이때 운영 중인 서버라면 꼭 해당 프로세스에 대해 확인 후 서비스 영향도를 확인해야 합니다.
부모 프로세스가 정상적으로 실행 중인 데몬이라면 종료 시킬 시 서비스에 영향도가 발생할 수 있습니다.
5) 부모 프로세스를 종료 후 다시 확인하여 좀비 프로세스 상태인 프로세스가 존재 하는지 확인 합니다.
6) top 명령어를 통하여 좀비 프로세스가 남아있는지 확인 합니다. 5)번의 내용에서 확인 했기 때문에
다시 확인하실 필요는 없습니다.
좀비 프로세스 만들기
- 아래 예제를 통하여 좀비 프로세스를 직접 만들어 볼 수 있습니다.
[예제 문]
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
int main ()
{
pid_t child_pid;
int child_status;
child_pid = fork ();
if (child_pid > 0) {
// parent process will sleep for 300 seconds and exit, without a call to wait()
fprintf(stderr,"parent process - %d\n", getpid());
sleep(300);
exit(0);
}
else if (child_pid == 0) {
// child process will exit immediately
fprintf(stderr,"child process - %d\n", getpid());
exit(0);
}
else if (child_pid == -1) {
// fork() error
perror("fork() call failed");
exit (-1);
}
else {
// this should not happen
fprintf(stderr, "unknown return value of %d from fork() call", child_pid);
exit (-2);
}
return 0;
}
해당 내용을 작성 후 gcc -o zombie zombie.c 로 컴파일 해 줍니다.
작성 후에는 ./zombie 로 실행이 가능 합니다.
실습을 해보실 수 있도록 예제로 만들어진 파일을 첨부하였습니다.
감사합니다.
# 참고한 글 : https://wildeveloperetrain.tistory.com/180
1u서버 / APC / DB / defog / DEFOG랙 / dell5820 / dell5820t / dell7920 / dellpoweredge / dellr240 / dellr340 / dellr350 / dellr450 / dellr540 / dellr630 / dellr640 / dellr740 / dellr750 / dellserver / dellt40 / dellt440 / dellt5820 / dell서버 / DELL서버CPU / DELL서버RAID컨트롤러 / DELL서버SAS하드디스크 / DELL서버가격비교 / DELL서버가격비교견적 / DELL서버견적 / DELL서버구매 / DELL서버디스크교체 / DELL서버메모리 / DELL서버펌웨어 / DELL서버하드디스크구매 / dell워크스테이션 / dl20 / dl20gen10 / dl360 / dl360gen10 / dl380 / dl380g10 / dl380gen10 / ECC메모리 / EDFOG랙가격 / ESTSOFT / FIRMWARE / gpu서버 / gpu타워형서버 / HA솔루션 / hpdl20 / hpdl360 / hpdl360gen10 / hpdl380 / hpdl380g10 / HPE / HPE Service Pack for Proliant / HPE SPP / hpedl20 / hpedl20gen10 / hpedl360gen10 / hpe서버 / HPE서버CPU / HPE서버RAID컨트롤러 / HPE서버SAS하드디스크 / HPE서버가격비교 / HPE서버가격비교견적 / HPE서버견적 / HPE서버구매 / HPE서버드라이버설치 / HPE서버디스크교체 / HPE서버메모리 / HPE서버비용 / HPE서버펌웨어 / HPE서버하드디스크구매 / hpgen10 / hpml30 / hpserver / hpz2 / hpz4 / hpz420 / hpz440 / hpz4g4 / hpz640 / hpz6g4 / hpz8g4 / hp마이크로서버 / hp서버 / hp서버800 / hp서버800w / hp서버cto / hp서버pc / HP서버메모리 / hp서버컴퓨터 / HP서버펌웨어 / HP서버하드디스크 / hp워크스테이션 / hp프로라이언트 / HYPER BACKUP / ibm서버 / Intelligent Provisioning / KVM / KVM 기술지원비(비용) / KVM 설치비 / L2스위치 / L3스위치 / LENONO서버SAS하드디스크 / lenovop620 / lenovor650 / LENOVO서버 / LENOVO서버CPU / LENOVO서버RAID컨트롤러 / LENOVO서버가격비교 / LENOVO서버가격비교견적 / LENOVO서버견적 / LENOVO서버구매 / LENOVO서버디스크교체 / LENOVO서버메모리 / LENOVO서버하드디스크구매 / LENOVO펌웨어업데이트 / Linux / ML30 / ml30gen10 / ML350GEN10 / ML360 / MSSQL / MSSQL 기술지원비(비용) / MSSQL 설치비 / MYSQL / MySQL 기술지원비(비용) / MySQL 설치비 / OS설치 / p17079-b21 / poweredger740 / poweredger750 / precision5820 / QUADRO / QUADRO그래픽카드 / r240 / r340 / r440 / r740 / RHEL설치 / RMS랙 / server / serverpc / SOPHOS / SPP / sr250 / sr650 / SYNOLOGY / SYNOLOGY나스 / UPS / UPS기술지원 / UPS납품 / UPS설치 / V3 / Windows서버설치 / z420 / z620 / z840 / z8g4 / 기술지원비(비용) / 나스기술지원 / 나스설치지원 / 네트워크스위치 / 네트워크장비 / 더블테이크 / 데이터베이스 / 델5820 / 델서버 / 델서버비용 / 델서버펌웨어업데이트 / 델워크스테이션 / 델컴퓨터워크스테이션 / 디포그 / 디포그랙 / 디포그랙가격 / 딥러닝pc / 딥러닝서버 / 랙 / 랙(RACK) 기술지원비(비용) / 랙(RACK) 설치비 / 랙납품설치 / 랙설치 / 레노버p620 / 레노버서버 / 레노버워크스테이션 / 레노보서버 / 레노보서버펌웨어 / 레드헷설치 / 리눅스 기술지원비(비용) / 리눅스 설치비 / 리눅스서버 / 리눅스서버설치 / 리눅스서버트러블슈팅 / 리눅스트러블슈팅 / 리욱스 / 미니서버 / 미니서버랙 / 방화벽 / 방화벽 기술지원비(비용) / 방화벽 설치비 / 방화벽엔지니어 / 백업 / 보안솔루션 / 보안솔루션구매 / 보안솔루션설치 / 서버 / 서버 기술지원비(비용) / 서버 랙마운트비용 / 서버 설치비 / 서버 장애조치비용 / 서버CPU / 서버MEMORY / 서버OS설치 / 서버pc / 서버가격 / 서버구매 / 서버기술지원 / 서버납품 / 서버디스크장애처리 / 서버랙 / 서버렉마운트 / 서버메모리 / 서버몬 / 서버몬기술지원 / 서버백업 / 서버보안 / 서버엔지니어 / 서버용pc / 서버용그래픽카드 / 서버용메모리 / 서버용컴퓨터 / 서버용하드디스크 / 서버컴 / 서버컴퓨터 / 서버트러블슈팅 / 서버호스팅 / 소포스 / 스위치 / 스위치 기술지원비(비용) / 스위치 설치비 / 스토리지 / 스토리지 기술지원비(비용) / 스토리지 랙마운트비용 / 스토리지 설치비 / 스토리지 장애조치비용 / 스토리지납품설치 / 스토리지서버 / 시놀로지DS918 / 시놀로지HyperBackup / 시놀로지나스 / 시놀로지나스백업 / 시놀로지하이퍼백업 / 시큐어디스크 / 안랩 / 알약 / 왼도우서버설치 / 우분투설치 / 워크스테이션 / 워크스테이션pc / 워크스테이션컴퓨터 / 윈도우서버 / 윈도우서버2016 / 윈도우서버2019 / 윈도우서버트러블슈팅 / 윈도우즈 기술지원비(비용) / 윈도우즈 설치비 / 이스트소프트 / 이중화솔루션 / 이중화솔루션구매 / 이중화솔루션설치 / 인터넷디스크 / 작업장컴퓨터 / 제온서버 / 젠서버 / 중고서버 / 중고워크스테이션 / 카보나이트 / 카스퍼스키 / 컴퓨터서버 / 쿼드로P400 / 타워형서버 / 페도라설치 / 프로라이언트 / GPU서버 / 미니서버렉 / 서버용PC / 젠서버 / AI서버 / 제온서버 / 서버가격 / 1U서버 / HPDL20Gen10 / HP서버8SFF800W / 가상서버 / 타워형서버 / HPDL360 / HPDL380Gen10 / 컴퓨터서버 / 미디어서버 / 타워서버 / DB서버 / HP서버580 / HP서버파워 / HPDL360Gen10 / 윈도우서버컴퓨터 / XEON서버 / 881457-B21
'설치 및 기술 자료 > Linux' 카테고리의 다른 글
[Linux] PostgreSQL 에 대해 알아보고 실습해보기 (0) | 2023.11.22 |
---|---|
[OS] 우분투 서버 GUI 설치 및 한글 설정 방법 (0) | 2023.10.31 |
[Linux] 리눅스 하드웨어 정보 열람하기 (0) | 2023.10.18 |
[Linux] CentOS7 nmtui 본딩 설정 방법 (0) | 2023.09.19 |
[Linux] WSL 환경에서 Nvidia CUDA 사용하기 (0) | 2023.09.09 |
댓글