
클라우독 2022년 상/하반기 이전 구 버젼 : 해당 있음.
클라우독 2022년 하반기 이후 신 버젼 : 해당 있음.
리눅스 서버에서 Apache가 크래시 될 경우 덤프 파일을 생성 할 수 있습니다.
본 아티클에서는 Apache 덤프파일 생성 방법과 덤프파일 분석 방법을 설명합니다.
1. httpd.conf 수정
① vi /usr/local/apache/conf/httpd.conf 로 설정파일을 오픈합니다.
② CoreDumpDirectory logs/apache_dump 항목을 추가하고 저장합니다.
2. apache_dump 폴더 생성
① mkdir /usr/local/apache/logs/apache_dump 명령어로 폴더를 생성합니다.
② chmod 777 /usr/local/apache/logs/apache_dump 명령어로 권한을 변경합니다.
3. core dump 파일크기 제한 해제
① unlimit -c unlimited 명령어로 core 파일크기 제한을 해제합니다.
4. Apache 서비스를 재시작 합니다.
덤프 설정 이후 Apache error.log에서 아래와 같은 형식의 Segmentation
fault 에러 로그가 확인되면 덤프 파일 생성됩니다.
아파치 error.log 경로 및 파일 형식: /usr/local/apache/logs/error.log.yyyy_mm_dd
[Wed
Mar 22 13:06:18.787227 2023] [core:notice] [pid 17582:tid 140344862984000]
AH00051: child pid 17585 exit signal Segmentation fault (11), possible
coredump in /usr/local/apache/logs/apache_dump |
덤프파일 분석은 문제가 발생한 서버에 직접 연결 후에 확인이 가능합니다. 내부PC로 dump 파일을 가져오더라도 확인은 불가합니다.
분석 절차는 다음과 같습니다.
1. Coredump 디렉토리(기본경로: /usr/local/apache/logs/apache_dump)로
설정한 경로로 이동합니다.
cd
/usr/local/apache/logs/apache_dump |
2. gdb 명령어를 통해 coredump 파일을 open합니다.
gdb /usr/local/apache/bin/httpd [coredump 파일명] ex) coredump 파일명이 core.10192 일 경우 gdb /usr/local/apache/bin/httpd core.10192 |
3. backtrace 명령어를 입력하여 로그를 확인합니다.
(gdb) bt #0 0x000000000001cbd6 in ?? () #1 0x00007f4290234164 in
plusdrive_DecryptFile_handler (pPDServerRequest=0x7f4288039030) at
protocol/decryptfile.x:146 #2
0x0000000000000000 in ?? () |
위 back trace 로그 중 분석 가능한 프레임과 불가능한 프레임은 다음과 같습니다.
- 분석 가능한 프레임: 1 (함수명: plusdrive_DecryptFile_handler, 코드 위치:
protocol/decryptfile.x:146 가 명시되어 있어서 확인 가능)
- 분석 불가능한 프레임: 0, 2 (함수 및 코드의
위치 정보가 없어서 확인 불가)
4. 문제가 발생한 frame으로 진입합니다.
(gdb) f [프레임
번호] ex) 프레임
번호가 1인 경우 (gdb) f 1
|
5. list 명령어를 통해 문제가 발생한 코드 위치를
확인합니다.
명령어를 입력해도 코드 위치가 나오지 않을 수 있습니다.
6. 3~5에서 확인한 로그 및 해당 서버의 엔진
버전을 웹개발팀에 전달하여 분석을 요청합니다. (필요에 따라 개발팀에서 원격 지원을 통해 확인이 필요할
수 있습니다.)
7. 확인이 완료되면 [q]를 입력하여 디버깅을 중단합니다.