11.3. 읽을 수 있는 코어 덤프 파일 생성
Ceph 데몬이 분할 오류로 예기치 않게 종료되면 실패에 대한 정보를 수집하여 Red Hat 지원 엔지니어에게 제공합니다.
이러한 정보로 초기 조사 속도가 빨라집니다. 또한 지원 엔지니어는 코어 덤프 파일의 정보와 Red Hat Ceph Storage 클러스터의 알려진 문제를 비교할 수 있습니다.
11.3.1. 사전 요구 사항
ceph-debuginfo
패키지가 아직 설치되지 않은 경우 설치합니다.ceph-debuginfo
패키지가 포함된 리포지토리를 활성화합니다.Red Hat Enterprise Linux 7:
subscription-manager repos --enable=rhel-7-server-rhceph-4-DAEMON-debug-rpms
subscription-manager repos --enable=rhel-7-server-rhceph-4-DAEMON-debug-rpms
Copy to Clipboard Copied! Ceph 노드 유형에 따라
DAEMON
을osd
또는mon
로 바꿉니다.Red Hat Enterprise Linux 8:
subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-debug-rpms
subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-debug-rpms
Copy to Clipboard Copied! ceph-debuginfo 패키지를 설치합니다
.yum install ceph-debuginfo
[root@mon ~]# yum install ceph-debuginfo
Copy to Clipboard Copied!
gdb
패키지가 설치되어 있고 그렇지 않은 경우 설치합니다.yum install gdb
[root@mon ~]# yum install gdb
Copy to Clipboard Copied!
배포 유형에 따라 절차를 계속합니다.
11.3.2. 베어 메탈 배포에서 읽을 수 있는 코어 덤프 파일 생성
베어 메탈에서 Red Hat Ceph Storage를 사용하는 경우 코어 덤프 파일을 생성하려면 다음 절차를 따르십시오.
절차
Ceph의 코어 덤프 파일 생성을 활성화합니다.
/etc/systemd/system.conf 파일에 다음 매개변수를 추가하여 코어 덤프 파일의 적절한
ulimits
를 설정합니다.DefaultLimitCORE=infinity
DefaultLimitCORE=infinity
Copy to Clipboard Copied! 기본적으로
/lib/systemd/system/CLUSTER_NAME-DAEMON@.service에 있는 Ceph 데몬 서비스 파일의
PrivateTmp=true
매개 변수를 주석 처리합니다.PrivateTmp=true
[root@mon ~]# PrivateTmp=true
Copy to Clipboard Copied! Ceph 데몬이 덤프 코어 파일을 생성할 수 있도록
suid_dumpable
플래그를2
로 설정합니다.sysctl fs.suid_dumpable=2
[root@mon ~]# sysctl fs.suid_dumpable=2
Copy to Clipboard Copied! 코어 덤프 파일 위치를 조정합니다.
sysctl kernel.core_pattern=/tmp/core
[root@mon ~]# sysctl kernel.core_pattern=/tmp/core
Copy to Clipboard Copied! [Coredump]
섹션 아래에 다음 행을 추가하여/etc/systemd/coredump.conf
파일을 수정합니다.ProcessSizeMax=8G ExternalSizeMax=8G JournalSizeMax=8G
ProcessSizeMax=8G ExternalSizeMax=8G JournalSizeMax=8G
Copy to Clipboard Copied! 변경 사항을 적용하려면
systemd
서비스를 다시 로드합니다.systemctl daemon-reload
[root@mon ~]# systemctl daemon-reload
Copy to Clipboard Copied! 변경 사항을 적용하려면 Ceph 데몬을 다시 시작하십시오.
systemctl restart ceph-DAEMON@ID
[root@mon ~]# systemctl restart ceph-DAEMON@ID
Copy to Clipboard Copied! 데몬 유형(osd
또는
mon
) 및 ID(OSS의 수 또는 모니터의 호스트 이름)를 지정합니다. 예를 들면 다음과 같습니다.systemctl restart ceph-osd@1
[root@mon ~]# systemctl restart ceph-osd@1
Copy to Clipboard Copied!
- 실패를 재현합니다. 예를 들어 데몬을 다시 시작합니다.
GDB(GNU Debugger)를 사용하여 애플리케이션 코어 덤프 파일에서 읽을 수 있는 역추적을 생성합니다.
gdb /usr/bin/ceph-DAEMON /tmp/core.PID
gdb /usr/bin/ceph-DAEMON /tmp/core.PID
Copy to Clipboard Copied! 데몬 유형 및 실패한 프로세스의 PID를 지정합니다. 예를 들면 다음과 같습니다.
gdb /usr/bin/ceph-osd /tmp/core.123456
$ gdb /usr/bin/ceph-osd /tmp/core.123456
Copy to Clipboard Copied! GDB 명령 프롬프트에서 페이징을 비활성화하고 명령에
set pag off
명령을 입력하고로그를 설정하여 파일에 대한
로깅을 활성화합니다.(gdb) set pag off (gdb) set log on
(gdb) set pag off (gdb) set log on
Copy to Clipboard Copied! bt full
을 입력하여 프로세스의 모든 스레드에backtrace
명령을 적용합니다.(gdb) thr a a bt full
(gdb) thr a a bt full
Copy to Clipboard Copied! backtrace가 생성된 후
set log off
를 입력하여 로깅을 해제합니다.(gdb) set log off
(gdb) set log off
Copy to Clipboard Copied! -
로그 파일
gdb.txt
를 에서 Red Hat 고객 포털에 액세스하는 시스템으로 전송하여 지원 티켓에 연결합니다.
11.3.3. 컨테이너화된 배포에서 읽을 수 있는 코어 덤프 파일 생성
컨테이너에서 Red Hat Ceph Storage를 사용하는 경우 코어 덤프 파일을 생성하려면 다음 절차를 따르십시오. 절차에는 코어 덤프 파일을 캡처하는 두 가지 시나리오가 포함됩니다.
- SIGILL, SIGTRAP, SIGABRT 또는 SIGSEGV 오류로 인해 Ceph 프로세스가 예기치 않게 종료되는 경우
또는
- 예를 들어, Ceph 프로세스와 같은 문제를 디버깅하기 위해 수동으로 CPU 주기가 높거나 응답하지 않는 경우가 있습니다.
사전 요구 사항
- Ceph 컨테이너를 실행하는 컨테이너 노드에 대한 루트 수준 액세스.
- 적절한 디버깅 패키지 설치.
-
gdb
(GNU Project Debugger) 패키지 설치.
절차
SIGILL, SIGTRAP, SIGABRT 또는 SIGSEGV 오류로 인해 Ceph 프로세스가 예기치 않게 종료되는 경우:
Ceph 프로세스가 실패한 컨테이너가 실행 중인 노드의
systemd-coredump
서비스로 코어 패턴을 설정합니다. 예를 들면 다음과 같습니다.echo "| /usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" > /proc/sys/kernel/core_pattern
[root@mon]# echo "| /usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" > /proc/sys/kernel/core_pattern
Copy to Clipboard Copied! Ceph 프로세스로 인해 다음 컨테이너 오류가 있는지 확인하고
/var/lib/systemd/coredump/
디렉터리에서 코어 덤프 파일을 검색합니다. 예를 들면 다음과 같습니다.ls -ltr /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
Copy to Clipboard Copied!
Ceph Monitors 및 Ceph Manager 에 대한 코어 덤프 파일을 수동으로 캡처하려면 다음을 수행합니다.
컨테이너에서 Ceph 데몬의
ceph-mon
패키지 세부 정보를 가져옵니다.Red Hat Enterprise Linux 7:
docker exec -it NAME /bin/bash rpm -qa | grep ceph
[root@mon]# docker exec -it NAME /bin/bash [root@mon]# rpm -qa | grep ceph
Copy to Clipboard Copied! Red Hat Enterprise Linux 8:
podman exec -it NAME /bin/bash rpm -qa | grep ceph
[root@mon]# podman exec -it NAME /bin/bash [root@mon]# rpm -qa | grep ceph
Copy to Clipboard Copied! NAME 을 Ceph 컨테이너의 이름으로 바꿉니다.
백업 복사본을 만들고
ceph-mon@.service 파일을 편집하기 위해 엽니다.
cp /etc/systemd/system/ceph-mon@.service /etc/systemd/system/ceph-mon@.service.orig
[root@mon]# cp /etc/systemd/system/ceph-mon@.service /etc/systemd/system/ceph-mon@.service.orig
Copy to Clipboard Copied! ceph-mon@.service
파일에서[Service]
섹션에 이러한 세 가지 옵션을 각각 별도의 행에 추가합니다.--pid=host \ --ipc=host \ --cap-add=SYS_PTRACE \
--pid=host \ --ipc=host \ --cap-add=SYS_PTRACE \
Copy to Clipboard Copied! 예제
[Unit] Description=Ceph Monitor After=docker.service [Service] EnvironmentFile=-/etc/environment ExecStartPre=-/usr/bin/docker rm ceph-mon-%i ExecStartPre=/bin/sh -c '"$(command -v mkdir)" -p /etc/ceph /var/lib/ceph/mon' ExecStart=/usr/bin/docker run --rm --name ceph-mon-%i \ --memory=924m \ --cpu-quota=100000 \ -v /var/lib/ceph:/var/lib/ceph:z \ -v /etc/ceph:/etc/ceph:z \ -v /var/run/ceph:/var/run/ceph:z \ -v /etc/localtime:/etc/localtime:ro \ --net=host \ --privileged=true \ --ipc=host \ --pid=host \ --cap-add=SYS_PTRACE \ -e IP_VERSION=4 \ -e MON_IP=10.74.131.17 \ -e CLUSTER=ceph \ -e FSID=9448efca-b1a1-45a3-bf7b-b55cba696a6e \ -e CEPH_PUBLIC_NETWORK=10.74.131.0/24 \ -e CEPH_DAEMON=MON \ \ registry.access.redhat.com/rhceph/rhceph-3-rhel7:latest ExecStop=-/usr/bin/docker stop ceph-mon-%i ExecStopPost=-/bin/rm -f /var/run/ceph/ceph-mon.pd-cephcontainer-mon01.asok Restart=always RestartSec=10s TimeoutStartSec=120 TimeoutStopSec=15 [Install] WantedBy=multi-user.target
[Unit] Description=Ceph Monitor After=docker.service [Service] EnvironmentFile=-/etc/environment ExecStartPre=-/usr/bin/docker rm ceph-mon-%i ExecStartPre=/bin/sh -c '"$(command -v mkdir)" -p /etc/ceph /var/lib/ceph/mon' ExecStart=/usr/bin/docker run --rm --name ceph-mon-%i \ --memory=924m \ --cpu-quota=100000 \ -v /var/lib/ceph:/var/lib/ceph:z \ -v /etc/ceph:/etc/ceph:z \ -v /var/run/ceph:/var/run/ceph:z \ -v /etc/localtime:/etc/localtime:ro \ --net=host \ --privileged=true \ --ipc=host \
1 --pid=host \
2 --cap-add=SYS_PTRACE \
3 -e IP_VERSION=4 \ -e MON_IP=10.74.131.17 \ -e CLUSTER=ceph \ -e FSID=9448efca-b1a1-45a3-bf7b-b55cba696a6e \ -e CEPH_PUBLIC_NETWORK=10.74.131.0/24 \ -e CEPH_DAEMON=MON \ \ registry.access.redhat.com/rhceph/rhceph-3-rhel7:latest ExecStop=-/usr/bin/docker stop ceph-mon-%i ExecStopPost=-/bin/rm -f /var/run/ceph/ceph-mon.pd-cephcontainer-mon01.asok Restart=always RestartSec=10s TimeoutStartSec=120 TimeoutStopSec=15 [Install] WantedBy=multi-user.target
Copy to Clipboard Copied! Ceph Monitor 데몬을 다시 시작합니다.
구문
systemctl restart ceph-mon@MONITOR_ID
systemctl restart ceph-mon@MONITOR_ID
Copy to Clipboard Copied! MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꿉니다.
예제
systemctl restart ceph-mon@1
[root@mon]# systemctl restart ceph-mon@1
Copy to Clipboard Copied! Ceph Monitor 컨테이너 내부에
gdb
패키지를 설치합니다.Red Hat Enterprise Linux 7:
docker exec -it ceph-mon-MONITOR_ID /bin/bash
[root@mon]# docker exec -it ceph-mon-MONITOR_ID /bin/bash sh $ yum install gdb
Copy to Clipboard Copied! Red Hat Enterprise Linux 8:
podman exec -it ceph-mon-MONITOR_ID /bin/bash
[root@mon]# podman exec -it ceph-mon-MONITOR_ID /bin/bash sh $ yum install gdb
Copy to Clipboard Copied! MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꿉니다.
프로세스 ID를 찾습니다.
구문
ps -aef | grep PROCESS | grep -v run
ps -aef | grep PROCESS | grep -v run
Copy to Clipboard Copied! PROCESS 를 실패한 프로세스 이름으로 바꿉니다(예:
ceph-mon
).예제
ps -aef | grep ceph-mon | grep -v run
[root@mon]# 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
Copy to Clipboard Copied! 코어 덤프 파일을 생성합니다.
구문
gcore ID
gcore ID
Copy to Clipboard Copied! ID 를 이전 단계에서 가져온 실패한 프로세스의 ID(예:
18110
)로 바꿉니다.예제
gcore 18110
[root@mon]# gcore 18110 warning: target file /proc/18110/cmdline contained unexpected null characters Saved corefile core.18110
Copy to Clipboard Copied! 코어 덤프 파일이 올바르게 생성되었는지 확인합니다.
예제
ls -ltr
[root@mon]# ls -ltr total 709772 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110
Copy to Clipboard Copied! Ceph Monitor 컨테이너 외부에 코어 덤프 파일을 복사합니다.
Red Hat Enterprise Linux 7:
docker cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
[root@mon]# docker cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
Copy to Clipboard Copied! Red Hat Enterprise Linux 8:
podman cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
[root@mon]# podman cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
Copy to Clipboard Copied! MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꾸고 MONITOR_PID 를 프로세스 ID 번호로 바꿉니다.
ceph-mon@.service 파일의 백업 사본을 복원합니다.
cp /etc/systemd/system/ceph-mon@.service.orig /etc/systemd/system/ceph-mon@.service
[root@mon]# cp /etc/systemd/system/ceph-mon@.service.orig /etc/systemd/system/ceph-mon@.service
Copy to Clipboard Copied! Ceph Monitor 데몬을 다시 시작합니다.
구문
systemctl restart ceph-mon@MONITOR_ID
systemctl restart ceph-mon@MONITOR_ID
Copy to Clipboard Copied! MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꿉니다.
예제
systemctl restart ceph-mon@1
[root@mon]# systemctl restart ceph-mon@1
Copy to Clipboard Copied! - Red Hat 지원에 의한 분석용 코어 덤프 파일을 업로드하고 4단계를 참조하십시오.
Ceph OSD 의 코어 덤프 파일을 수동으로 캡처하려면 다음을 수행합니다.
컨테이너에서 Ceph 데몬의
ceph-osd
패키지 세부 정보를 가져옵니다.Red Hat Enterprise Linux 7:
docker exec -it NAME /bin/bash rpm -qa | grep ceph
[root@osd]# docker exec -it NAME /bin/bash [root@osd]# rpm -qa | grep ceph
Copy to Clipboard Copied! Red Hat Enterprise Linux 8:
podman exec -it NAME /bin/bash rpm -qa | grep ceph
[root@osd]# podman exec -it NAME /bin/bash [root@osd]# rpm -qa | grep ceph
Copy to Clipboard Copied! NAME 을 Ceph 컨테이너의 이름으로 바꿉니다.
Ceph 컨테이너가 실행 중인 노드에 동일한 버전의
ceph-osd
패키지에 대한 Ceph 패키지를 설치합니다.Red Hat Enterprise Linux 7:
yum install ceph-osd
[root@osd]# yum install ceph-osd
Copy to Clipboard Copied! Red Hat Enterprise Linux 8:
dnf install ceph-osd
[root@osd]# dnf install ceph-osd
Copy to Clipboard Copied! 필요한 경우 먼저 적절한 리포지토리를 활성화합니다. 자세한 내용은 설치 가이드 의 Red Hat Ceph Storage 리포지토리 활성화 섹션을 참조하십시오.
오류가 발생한 프로세스의 ID를 찾습니다.
ps -aef | grep PROCESS | grep -v run
ps -aef | grep PROCESS | grep -v run
Copy to Clipboard Copied! PROCESS 를 실패한 프로세스의 이름으로 바꿉니다(예:
ceph-osd
).ps -aef | grep ceph-osd | grep -v run
[root@osd]# ps -aef | grep ceph-osd | grep -v run ceph 15390 15266 0 18:54 ? 00:00:29 /usr/bin/ceph-osd --cluster ceph --setroot ceph --setgroup ceph -d -i 5 ceph 18110 17985 1 19:40 ? 00:00:08 /usr/bin/ceph-osd --cluster ceph --setroot ceph --setgroup ceph -d -i 2
Copy to Clipboard Copied! 코어 덤프 파일을 생성합니다.
gcore ID
gcore ID
Copy to Clipboard Copied! ID 를 이전 단계에서 가져온 실패한 프로세스의 ID(예:
18110
)로 바꿉니다.gcore 18110
[root@osd]# gcore 18110 warning: target file /proc/18110/cmdline contained unexpected null characters Saved corefile core.18110
Copy to Clipboard Copied! 코어 덤프 파일이 올바르게 생성되었는지 확인합니다.
ls -ltr
[root@osd]# ls -ltr total 709772 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110
Copy to Clipboard Copied! - Red Hat 지원으로 분석을 위해 코어 덤프 파일을 업로드하고 다음 단계를 참조하십시오.
- 분석을 위해 코어 덤프 파일을 Red Hat 지원 케이스에 업로드합니다. 자세한 내용은 Red Hat 지원 엔지니어에게 정보 제공.