'AIX 메모리덤프 확인'에 해당되는 글 1건

  1. 2020.11.24 [프로프레임] core dump 확인하기.

프로프레임은 현재는 AIX 서버에서만 돌아가는 프레임워크다.

실제 정상적인 비즈니스 오류, 디비 오류는 모두 일반적인 ulog 폴더에서 확인 가능하지만,

예상치 못한 오류(참조 오류 등)는 core로 떨어지면서 해당 TP서버는 재기동 된다.

core dump는 log 파일에 생성되지 않아 일반적으로 dbx를 사용해서 확인해야 하는데, 확인하기가 쉽지 않다. 

일반적으로 core 파일은 core를 발생시킨 바이너리와 동일한 폴더에 생성되지만 프로프레임은 보통 $PFM_CORE_DIR/{코어발생날짜}/{코어발생모듈} 폴더에 core 파일을 생성한다. ( 보통 ulog와 동일한 위치에 존재)


file 명령어를 사용하면 core 가 발생한 프로그램 바이너리와 bit 수를 출력해준다.

pfm5c@tmax:/pfm5c/proframe/logging/core/20181026/STEST00004]file core
core: AIX core file 64-bit, TPFM01(서버명 또는 서비스명)

dbx 명령어로 프로그램 바이너리 경로와 core 파일을 실행한다. 위의 코어는 티맥스 tcs 서버에서 호출한 서비스 모듈에서 발생한 core 이므로 서버 바이너리 경로는 $TMAXDIR/appbin 밑에 있는 서버 바이너리를 넣어준다.

ex> dbx [바이너리경로] [코어파일명]

pfm5c@tmax:/pfm5c/proframe/logging/core/20181026/STEST00004]dbx $TMAXDIR/appbin/TPFM01 core

경고: 코어 파일이 전체 코어(fullcore)가 아닙니다. 일부 정보가 사용 가능하지 않을 수 있습니다.

[core에서 메모리 이미지 사용]

기호 정보를 읽는 중 ...

Segmentation fault in pfmKillSelfProcess at line 1056 in file ""

"pfmOsWrapper.c"을(를) 읽을 수 없습니다.

(dbx)

dbx는 많은 명령어와 다양한 분석기법 사용이 가능하지만 가장 간단하고 흔히 쓰는 명령어는 [ where ] 명령어다. where 명령어로 function call stack을 읽어서 어떤 파일의 어떤 function이 호출될 때 core가 발생했는지 확인이 가능하다.

결론적으로, core 파일이 저장된 폴더로 가서 [dbx $TMAXDIR/appbin/TPFM01(서버 또는 서비스명) core ] 를 친 후, [ where ] 검색을 통해 참조 과정에서 오류나는 것을 찾으면 된다. 

통상 자주 발생하는 core는 PFM_ERR, PFM_DBG, PMF_LOG 시 문자열을 출력하는데, [%ld]를 사용하거나, 숫자를 출력하는데, [%s]를 사용하는 등 자료형을 잘못 이용할 때 발생한다. 

Posted by 목표를 가지고 달린다
,