10.2. 읽을 수 있는 코어 덤프 파일 생성
Ceph 데몬이 세그먼트 장애로 예기치 않게 종료되면 해당 실패에 대한 정보를 수집하여 Red Hat 지원 엔지니어에게 제공합니다.
이러한 정보는 초기 조사 속도를 높입니다. 또한 지원 엔지니어는 코어 덤프 파일의 정보를 Red Hat Ceph Storage 클러스터의 알려진 문제와 비교할 수 있습니다.
사전 요구 사항
아직 설치되지 않은 경우 debuginfo 패키지를 설치합니다.
다음 리포지토리를 활성화하여 필요한 debuginfo 패키지를 설치합니다.
예제
[root@host01 ~]# subscription-manager repos --enable=rhceph-6-tools-for-rhel-9-x86_64-rpms [root@host01 ~]# yum --enable=rhceph-6-tools-for-rhel-9-x86_64-debug-rpms
리포지토리가 활성화되면 지원되는 패키지 목록에서 필요한 디버그 정보 패키지를 설치할 수 있습니다.
ceph-base-debuginfo ceph-common-debuginfo ceph-debugsource ceph-fuse-debuginfo ceph-immutable-object-cache-debuginfo ceph-mds-debuginfo ceph-mgr-debuginfo ceph-mon-debuginfo ceph-osd-debuginfo ceph-radosgw-debuginfo cephfs-mirror-debuginfo
gdb
패키지가 설치되어 있는지 확인하고 없는 경우 설치합니다.예제
[root@host01 ~]# dnf install gdb
10.2.1. 컨테이너화된 배포에서 읽을 수 있는 코어 덤프 파일 생성
코어 덤프 파일을 캡처하는 두 가지 시나리오를 포함하는 Red Hat Ceph Storage 6의 코어 덤프 파일을 생성할 수 있습니다.
- SIGILL, SIGTRAP, SIGABRT 또는 SIGSEGV 오류로 인해 Ceph 프로세스가 예기치 않게 종료되면.
또는
- 예를 들어 Ceph 프로세스와 같은 문제를 디버깅하는 경우 수동으로 CPU 사이클을 사용하거나 응답하지 않습니다.
사전 요구 사항
- Ceph 컨테이너를 실행하는 컨테이너 노드에 대한 루트 수준 액세스.
- 적절한 디버깅 패키지 설치
-
GNU Project Debugger(
gdb
) 패키지 설치 - 호스트에 8GB 이상의 RAM이 있는지 확인합니다. 호스트에 데몬이 여러 개 있는 경우 Red Hat은 더 많은 RAM을 권장합니다.
절차
SIGILL, SIGTRAP, SIGABRT 또는 SIGSEGV 오류로 인해 Ceph 프로세스가 예기치 않게 종료되면 다음을 수행합니다.
오류가 발생한 Ceph 프로세스가 실행 중인 노드에서 코어 패턴을
systemd-coredump
서비스로 설정합니다.예제
[root@mon]# echo "| /usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e" > /proc/sys/kernel/core_pattern
Ceph 프로세스로 인해 다음 컨테이너 실패를 조사하고
/var/lib/systemd/coredump/
디렉토리에서 코어 덤프 파일을 검색합니다.예제
[root@mon]# ls -ltr /var/lib/systemd/coredump total 8232 -rw-r-----. 1 root root 8427548 Jan 22 19:24 core.ceph-osd.167.5ede29340b6c4fe4845147f847514c12.15622.1584573794000000.xz
Ceph Monitors 및 Ceph OSD 의 코어 덤프 파일을 수동으로 캡처하려면 다음을 수행합니다.
MONITOR_ID 또는 OSD_ID 를 가져와서 컨테이너를 입력합니다.
구문
podman ps podman exec -it MONITOR_ID_OR_OSD_ID bash
예제
[root@host01 ~]# podman ps [root@host01 ~]# podman exec -it ceph-1ca9f6a8-d036-11ec-8263-fa163ee967ad-osd-2 bash
컨테이너 내부에
procps-ng
및gdb
패키지를 설치합니다.예제
[root@host01 ~]# dnf install procps-ng gdb
프로세스 ID를 찾습니다.
구문
ps -aef | grep PROCESS | grep -v run
PROCESS 를 실행 중인 프로세스의 이름으로 교체합니다(예:
ceph-mon
또는ceph-osd
).예제
[root@host01 ~]# ps -aef | grep ceph-mon | grep -v run ceph 15390 15266 0 18:54 ? 00:00:29 /usr/bin/ceph-mon --cluster ceph --setroot ceph --setgroup ceph -d -i 5 ceph 18110 17985 1 19:40 ? 00:00:08 /usr/bin/ceph-mon --cluster ceph --setroot ceph --setgroup ceph -d -i 2
코어 덤프 파일을 생성합니다.
구문
gcore ID
ID 를 이전 단계에서 얻은 프로세스의 ID로 바꿉니다(예:
18110
).예제
[root@host01 ~]# gcore 18110 warning: target file /proc/18110/cmdline contained unexpected null characters Saved corefile core.18110
코어 덤프 파일이 올바르게 생성되었는지 확인합니다.
예제
[root@host01 ~]# ls -ltr total 709772 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110
Ceph Monitor 컨테이너 외부에서 코어 덤프 파일을 복사합니다.
구문
podman cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꾸고 MONITOR_PID 를 프로세스 ID 번호로 교체합니다.
다른 Ceph 데몬의 코어 덤프 파일을 수동으로 캡처하려면 다음을 수행합니다.
cephadm 쉘에
로그인합니다.예제
[root@host03 ~]# cephadm shell
데몬에
ptrace
를 활성화합니다.예제
[ceph: root@host01 /]# ceph config set mgr mgr/cephadm/allow_ptrace true
데몬 서비스를 재배포합니다.
구문
ceph orch redeploy SERVICE_ID
예제
[ceph: root@host01 /]# ceph orch redeploy mgr [ceph: root@host01 /]# ceph orch redeploy rgw.rgw.1
cephadm 쉘
을 종료하고 데몬이 배포된 호스트에 로그인합니다.예제
[ceph: root@host01 /]# exit [root@host01 ~]# ssh root@10.0.0.11
DAEMON_ID 를 가져와서 컨테이너를 입력합니다.
예제
[root@host04 ~]# podman ps [root@host04 ~]# podman exec -it ceph-1ca9f6a8-d036-11ec-8263-fa163ee967ad-rgw-rgw-1-host04 bash
procps-ng
및gdb
패키지를 설치합니다.예제
[root@host04 /]# dnf install procps-ng gdb
프로세스의 PID를 가져옵니다.
예제
[root@host04 /]# ps aux | grep rados ceph 6 0.3 2.8 5334140 109052 ? Sl May10 5:25 /usr/bin/radosgw -n client.rgw.rgw.1.host04 -f --setuser ceph --setgroup ceph --default-log-to-file=false --default-log-to-stderr=true --default-log-stderr-prefix=debug
코어 덤프 수집:
구문
gcore PID
예제
[root@host04 /]# gcore 6
코어 덤프 파일이 올바르게 생성되었는지 확인합니다.
예제
[root@host04 /]# ls -ltr total 108798 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.6
컨테이너 외부에서 코어 덤프 파일을 복사합니다.
구문
podman cp ceph-mon-DAEMON_ID:/tmp/mon.core.PID /tmp
DAEMON_ID 를 Ceph 데몬의 ID 번호로 바꾸고 PID 를 프로세스 ID 번호로 바꿉니다.
systemd-coredump
가 충돌된 ceph 데몬의 코어 덤프를 성공적으로 저장할 수 있도록 하려면 다음을 수행합니다.충돌된 프로세스의 코어 덤프 컬렉션을 허용하려면
DefaultLimitCORE
를/etc/systemd/system.conf
에서 무한 으로 설정합니다.구문
# cat /etc/systemd/system.conf DefaultLimitCORE=infinity
systemd
또는 노드를 다시 시작하여 업데이트된systemd
설정을 적용합니다.구문
# sudo systemctl daemon-reexec
이전 데몬과 관련된 코어 덤프 파일이 충돌하는지 확인합니다.
구문
# ls -ltr /var/lib/systemd/coredump/
- 분석을 위해 코어 덤프 파일을 Red Hat 지원 케이스에 업로드합니다. 자세한 내용은 Red Hat 지원 엔지니어에게 정보 제공 에서 참조하십시오.
추가 리소스
- How to use gdb to generate a read backtrace from an application core solution on the Red Hat Customer Portal
- Red Hat 고객 포털에서 애플리케이션이 충돌하거나 세그먼트 오류 솔루션인 경우 코어 파일 덤프를 활성화하는 방법