11.3. 읽을 수 있는 코어 덤프 파일 생성


Ceph 데몬이 분할 오류로 예기치 않게 종료되면 실패에 대한 정보를 수집하여 Red Hat 지원 엔지니어에게 제공합니다.

이러한 정보로 초기 조사 속도가 빨라집니다. 또한 지원 엔지니어는 코어 덤프 파일의 정보와 Red Hat Ceph Storage 클러스터의 알려진 문제를 비교할 수 있습니다.

11.3.1. 사전 요구 사항

  1. ceph-debuginfo 패키지가 아직 설치되지 않은 경우 설치합니다.

    1. ceph-debuginfo 패키지가 포함된 리포지토리를 활성화합니다.

      Red Hat Enterprise Linux 7:

      subscription-manager repos --enable=rhel-7-server-rhceph-4-DAEMON-debug-rpms
      Copy to Clipboard

      Ceph 노드 유형에 따라 DAEMONosd 또는 mon 로 바꿉니다.

      Red Hat Enterprise Linux 8:

      subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-debug-rpms
      Copy to Clipboard

    2. ceph-debuginfo 패키지를 설치합니다.

      [root@mon ~]# yum install ceph-debuginfo
      Copy to Clipboard
  2. gdb 패키지가 설치되어 있고 그렇지 않은 경우 설치합니다.

    [root@mon ~]# yum install gdb
    Copy to Clipboard

배포 유형에 따라 절차를 계속합니다.

11.3.2. 베어 메탈 배포에서 읽을 수 있는 코어 덤프 파일 생성

베어 메탈에서 Red Hat Ceph Storage를 사용하는 경우 코어 덤프 파일을 생성하려면 다음 절차를 따르십시오.

절차

  1. Ceph의 코어 덤프 파일 생성을 활성화합니다.

    1. /etc/systemd/system.conf 파일에 다음 매개변수를 추가하여 코어 덤프 파일의 적절한 ulimits 를 설정합니다.

      DefaultLimitCORE=infinity
      Copy to Clipboard
    2. 기본적으로 /lib/systemd/system/CLUSTER_NAME-DAEMON@.service에 있는 Ceph 데몬 서비스 파일의 PrivateTmp=true 매개 변수를 주석 처리합니다.

      [root@mon ~]# PrivateTmp=true
      Copy to Clipboard
    3. Ceph 데몬이 덤프 코어 파일을 생성할 수 있도록 suid_dumpable 플래그를 2 로 설정합니다.

      [root@mon ~]# sysctl fs.suid_dumpable=2
      Copy to Clipboard
    4. 코어 덤프 파일 위치를 조정합니다.

      [root@mon ~]# sysctl kernel.core_pattern=/tmp/core
      Copy to Clipboard
    5. [Coredump] 섹션 아래에 다음 행을 추가하여 /etc/systemd/coredump.conf 파일을 수정합니다.

      ProcessSizeMax=8G
      ExternalSizeMax=8G
      JournalSizeMax=8G
      Copy to Clipboard
    6. 변경 사항을 적용하려면 systemd 서비스를 다시 로드합니다.

      [root@mon ~]# systemctl daemon-reload
      Copy to Clipboard
    7. 변경 사항을 적용하려면 Ceph 데몬을 다시 시작하십시오.

      [root@mon ~]# systemctl restart ceph-DAEMON@ID
      Copy to Clipboard

      데몬 유형(osd또는 mon) 및 ID(OSS의 수 또는 모니터의 호스트 이름)를 지정합니다. 예를 들면 다음과 같습니다.

      [root@mon ~]# systemctl restart ceph-osd@1
      Copy to Clipboard
  2. 실패를 재현합니다. 예를 들어 데몬을 다시 시작합니다.
  3. GDB(GNU Debugger)를 사용하여 애플리케이션 코어 덤프 파일에서 읽을 수 있는 역추적을 생성합니다.

    gdb /usr/bin/ceph-DAEMON /tmp/core.PID
    Copy to Clipboard

    데몬 유형 및 실패한 프로세스의 PID를 지정합니다. 예를 들면 다음과 같습니다.

    $ gdb /usr/bin/ceph-osd /tmp/core.123456
    Copy to Clipboard

    GDB 명령 프롬프트에서 페이징을 비활성화하고 명령에 set pag off 명령을 입력하고 로그를 설정하여 파일에 대한 로깅을 활성화합니다.

    (gdb) set pag off
    (gdb) set log on
    Copy to Clipboard

    bt full 을 입력하여 프로세스의 모든 스레드에 backtrace 명령을 적용합니다.

    (gdb) thr a a bt full
    Copy to Clipboard

    backtrace가 생성된 후 set log off 를 입력하여 로깅을 해제합니다.

    (gdb) set log off
    Copy to Clipboard
  4. 로그 파일 gdb.txt 를 에서 Red Hat 고객 포털에 액세스하는 시스템으로 전송하여 지원 티켓에 연결합니다.

11.3.3. 컨테이너화된 배포에서 읽을 수 있는 코어 덤프 파일 생성

컨테이너에서 Red Hat Ceph Storage를 사용하는 경우 코어 덤프 파일을 생성하려면 다음 절차를 따르십시오. 절차에는 코어 덤프 파일을 캡처하는 두 가지 시나리오가 포함됩니다.

  • SIGILL, SIGTRAP, SIGABRT 또는 SIGSEGV 오류로 인해 Ceph 프로세스가 예기치 않게 종료되는 경우

또는

  • 예를 들어, Ceph 프로세스와 같은 문제를 디버깅하기 위해 수동으로 CPU 주기가 높거나 응답하지 않는 경우가 있습니다.

사전 요구 사항

  • Ceph 컨테이너를 실행하는 컨테이너 노드에 대한 루트 수준 액세스.
  • 적절한 디버깅 패키지 설치.
  • gdb(GNU Project Debugger) 패키지 설치.

절차

  1. SIGILL, SIGTRAP, SIGABRT 또는 SIGSEGV 오류로 인해 Ceph 프로세스가 예기치 않게 종료되는 경우:

    1. Ceph 프로세스가 실패한 컨테이너가 실행 중인 노드의 systemd-coredump 서비스로 코어 패턴을 설정합니다. 예를 들면 다음과 같습니다.

      [root@mon]# echo "| /usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" > /proc/sys/kernel/core_pattern
      Copy to Clipboard
    2. 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
      Copy to Clipboard
  2. Ceph Monitors 및 Ceph Manager 에 대한 코어 덤프 파일을 수동으로 캡처하려면 다음을 수행합니다.

    1. 컨테이너에서 Ceph 데몬의 ceph-mon 패키지 세부 정보를 가져옵니다.

      Red Hat Enterprise Linux 7:

      [root@mon]# docker exec -it NAME /bin/bash
      [root@mon]# rpm -qa | grep ceph
      Copy to Clipboard

      Red Hat Enterprise Linux 8:

      [root@mon]# podman exec -it NAME /bin/bash
      [root@mon]# rpm -qa | grep ceph
      Copy to Clipboard

      NAME 을 Ceph 컨테이너의 이름으로 바꿉니다.

    2. 백업 복사본을 만들고 ceph-mon@.service 파일을 편집하기 위해 엽니다.

      [root@mon]# cp /etc/systemd/system/ceph-mon@.service /etc/systemd/system/ceph-mon@.service.orig
      Copy to Clipboard
    3. ceph-mon@.service 파일에서 [Service] 섹션에 이러한 세 가지 옵션을 각각 별도의 행에 추가합니다.

      --pid=host \
      --ipc=host \
      --cap-add=SYS_PTRACE \
      Copy to Clipboard

      예제

      [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

    4. Ceph Monitor 데몬을 다시 시작합니다.

      구문

      systemctl restart ceph-mon@MONITOR_ID
      Copy to Clipboard

      MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꿉니다.

      예제

      [root@mon]# systemctl restart ceph-mon@1
      Copy to Clipboard

    5. Ceph Monitor 컨테이너 내부에 gdb 패키지를 설치합니다.

      Red Hat Enterprise Linux 7:

      [root@mon]# docker exec -it ceph-mon-MONITOR_ID /bin/bash
      sh $ yum install gdb
      Copy to Clipboard

      Red Hat Enterprise Linux 8:

      [root@mon]# podman exec -it ceph-mon-MONITOR_ID /bin/bash
      sh $ yum install gdb
      Copy to Clipboard

      MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꿉니다.

    6. 프로세스 ID를 찾습니다.

      구문

      ps -aef | grep PROCESS | grep -v run
      Copy to Clipboard

      PROCESS 를 실패한 프로세스 이름으로 바꿉니다(예: ceph-mon ).

      예제

      [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

    7. 코어 덤프 파일을 생성합니다.

      구문

      gcore ID
      Copy to Clipboard

      ID 를 이전 단계에서 가져온 실패한 프로세스의 ID(예: 18110 )로 바꿉니다.

      예제

      [root@mon]# gcore 18110
      warning: target file /proc/18110/cmdline contained unexpected null characters
      Saved corefile core.18110
      Copy to Clipboard

    8. 코어 덤프 파일이 올바르게 생성되었는지 확인합니다.

      예제

      [root@mon]# ls -ltr
      total 709772
      -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110
      Copy to Clipboard

    9. Ceph Monitor 컨테이너 외부에 코어 덤프 파일을 복사합니다.

      Red Hat Enterprise Linux 7:

      [root@mon]# docker cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
      Copy to Clipboard

      Red Hat Enterprise Linux 8:

      [root@mon]# podman cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmp
      Copy to Clipboard

      MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꾸고 MONITOR_PID 를 프로세스 ID 번호로 바꿉니다.

    10. ceph-mon@.service 파일의 백업 사본을 복원합니다.

      [root@mon]# cp /etc/systemd/system/ceph-mon@.service.orig /etc/systemd/system/ceph-mon@.service
      Copy to Clipboard
    11. Ceph Monitor 데몬을 다시 시작합니다.

      구문

      systemctl restart ceph-mon@MONITOR_ID
      Copy to Clipboard

      MONITOR_ID 를 Ceph Monitor의 ID 번호로 바꿉니다.

      예제

      [root@mon]# systemctl restart ceph-mon@1
      Copy to Clipboard

    12. Red Hat 지원에 의한 분석용 코어 덤프 파일을 업로드하고 4단계를 참조하십시오.
  3. Ceph OSD 의 코어 덤프 파일을 수동으로 캡처하려면 다음을 수행합니다.

    1. 컨테이너에서 Ceph 데몬의 ceph-osd 패키지 세부 정보를 가져옵니다.

      Red Hat Enterprise Linux 7:

      [root@osd]# docker exec -it NAME /bin/bash
      [root@osd]# rpm -qa | grep ceph
      Copy to Clipboard

      Red Hat Enterprise Linux 8:

      [root@osd]# podman exec -it NAME /bin/bash
      [root@osd]# rpm -qa | grep ceph
      Copy to Clipboard

      NAME 을 Ceph 컨테이너의 이름으로 바꿉니다.

    2. Ceph 컨테이너가 실행 중인 노드에 동일한 버전의 ceph-osd 패키지에 대한 Ceph 패키지를 설치합니다.

      Red Hat Enterprise Linux 7:

      [root@osd]# yum install ceph-osd
      Copy to Clipboard

      Red Hat Enterprise Linux 8:

      [root@osd]# dnf install ceph-osd
      Copy to Clipboard

      필요한 경우 먼저 적절한 리포지토리를 활성화합니다. 자세한 내용은 설치 가이드 의 Red Hat Ceph Storage 리포지토리 활성화 섹션을 참조하십시오.

    3. 오류가 발생한 프로세스의 ID를 찾습니다.

      ps -aef | grep PROCESS | grep -v run
      Copy to Clipboard

      PROCESS 를 실패한 프로세스의 이름으로 바꿉니다(예: ceph-osd ).

      [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
    4. 코어 덤프 파일을 생성합니다.

      gcore ID
      Copy to Clipboard

      ID 를 이전 단계에서 가져온 실패한 프로세스의 ID(예: 18110 )로 바꿉니다.

      [root@osd]# gcore 18110
      warning: target file /proc/18110/cmdline contained unexpected null characters
      Saved corefile core.18110
      Copy to Clipboard
    5. 코어 덤프 파일이 올바르게 생성되었는지 확인합니다.

      [root@osd]# ls -ltr
      total 709772
      -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110
      Copy to Clipboard
    6. Red Hat 지원으로 분석을 위해 코어 덤프 파일을 업로드하고 다음 단계를 참조하십시오.
  4. 분석을 위해 코어 덤프 파일을 Red Hat 지원 케이스에 업로드합니다. 자세한 내용은 Red Hat 지원 엔지니어에게 정보 제공.

11.3.4. 추가 리소스

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat