본문 바로가기

DB/Oracle

[Oracle/Linux] Oracle linux 7.X gdb CPU 100 (top cpu consume 100)

보통 패치가 잘되어 있고 클러스터 문제가 발생하지 않는 환경에서는 발생하지 않지만, 테스트 서버를 운영할 때 리소스 문제로 종종 보게되는 이슈

 

해당 증상은 Oracle linux 7.X 12cR2에서 주로 한 노드만 살아있을 경우(정확히는 클러스터에 문제가 생겼을 경우) 발생하는 증상이다.

 

Oracle 12.2 Autonomous Health Framework의 기능으로 클러스터에서 OS 상태를 점검하는 프로세스인 osysmond가  diagsnap.pl를 수행하게 되는데 이때 한쪽 노드가 죽었을 경우 특정 조건에 의해 미친듯이 디버깅을 수행하고, 관련 정보를 수집하게 된다. 이 때 디버깅에 사용되는 녀석이 gdb이다.

 

최대 6개의 gdb가 발생하고 5분마다 반복되니 한쪽 노드가 죽어있는 동안은 CPU가 Full이나서 모든 작동에 지연이 발생하게된다.

 

 

해결방안 1)

 

비정상 동작이냐 하면, 오라클 레퍼런스에서도 known issue로 다루고 커널을 최신화 하도록 권고를 하긴 하지만, gdb의 비정상 작동이라고는 안한다. (7.x에서 더 높은 커널 버전에서도 재현되는 걸 보면 이것도 무조건 해결되는 것은 아니다.)

 

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=184937774041638&parent=EXTERNAL_SEARCH&sourceId=PROBLEM&id=2424462.1&_afrWindowMode=0&_adf.ctrl-state=16sualvk5s_53

 

해결방안 2)

 

최신 패치를 먹인다.

 

해결방안 3)

 

가장 빠르고 간단한 diagsnap이 작동하지 않도록 비활성하는 방법이다.

모든 노드를 켠 상태에서

 

oclumon manage -disable diagsnap

 

명령어를 클러스터 권한을 가진 유저로 수행한다.

더 이상 노드 다운 후 해당 툴을 이용한 디버깅을 통한 진단 정보를 생성하지 않기 때문에 정~말 유사시 문제가 될 수도 있다.