덤프 설정 이후 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 명령어를 통해 문제가 발생한 코드 위치를 확인합니다.
(gdb) list |
명령어를 입력해도 코드 위치가 나오지 않을 수 있습니다.
6. 3~5에서 확인한 로그 및 해당 서버의 엔진 버전을 웹개발팀에 전달하여 분석을 요청합니다. (필요에 따라 개발팀에서 원격 지원을 통해 확인이 필요할 수 있습니다.)
(gdb) q |