検索

11.3. 判読可能なコアダンプファイルの生成

download PDF

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

      Ceph ノードの種別に応じて、DAEMONosd または mon に置き換えます。

      Red Hat Enterprise Linux 8:

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

    2. ceph-debuginfo パッケージをインストールします。

      [root@mon ~]# yum install ceph-debuginfo
  2. gdb パッケージがインストールされていることを確認します。インストールされていない場合は、インストールします。

    [root@mon ~]# yum install gdb

デプロイメントのタイプに基づいて、手順を続けます。

11.3.2. ベアメタルデプロイメントでの判読可能なコアダンプファイルの生成

ベアメタルで Red Hat Ceph Storage を使用する場合、以下の手順に従ってコアダンプファイルを生成します。

手順

  1. Ceph のコアダンプファイルの生成を有効にします。

    1. /etc/systemd/system.conf ファイルに以下のパラメーターを追加して、コアダンプファイルに適切な ulimits を設定します。

      DefaultLimitCORE=infinity
    2. デフォルトでは、/lib/systemd/system/CLUSTER_NAME-DAEMON@.service にある Ceph デーモンサービスファイルの PrivateTmp=true パラメーターをコメントアウトします。

      [root@mon ~]# PrivateTmp=true
    3. suid_dumpable フラグを 2 に設定して、Ceph デーモンがダンプコアファイルを生成できるようにします。

      [root@mon ~]# sysctl fs.suid_dumpable=2
    4. コアダンプファイルの場所を調整します。

      [root@mon ~]# sysctl kernel.core_pattern=/tmp/core
    5. セクション [Coredump] の下に次の行を追加して、/ etc/systemd/coredump.conf ファイルを変更します。

      ProcessSizeMax=8G
      ExternalSizeMax=8G
      JournalSizeMax=8G
    6. systemd サービスを再読み込みし、変更を反映します。

      [root@mon ~]# systemctl daemon-reload
    7. 変更を反映するために、Ceph デーモンを再起動します。

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

      デーモンタイプ (osd または mon) とその ID (OSD の場合は数値、または Monitors の短縮ホスト名) を指定します。以下に例を示します。

      [root@mon ~]# systemctl restart ceph-osd@1
  2. デーモンを再度起動するなど、障害を再現します。
  3. GNU Debugger (GDB) を使用して、アプリケーションのコアダンプファイルから判読可能なバックトレースを生成します。

    gdb /usr/bin/ceph-DAEMON /tmp/core.PID

    以下のように、デーモンのタイプと失敗したプロセスの PID を指定します。

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

    GDB コマンドプロンプトで set pag off 子マンとおよび set log on コマンドを入力し、ページングを無効にし、ファイルへのロギングを有効にします。

    (gdb) set pag off
    (gdb) set log on

    backtrace を入力して、thr a a bt full コマンドをプロセスのすべてのスレッドに適用します。

    (gdb) thr a a bt full

    バックトレースが生成されたら、set log off を入力して電源をオフにします。

    (gdb) set log off
  4. Red Hat カスタマーポータルにアクセスするシステムに gdb.txt ログファイルを転送して、サポートチケットにアタッチします。

11.3.3. コンテナー化されたデプロイメントでの判読可能なコアダンプファイルの生成

Red Hat Ceph Storage をコンテナーで使用する場合は、以下の手順に従ってコアダンプファイルを生成します。この手順では、コアダンプファイルを取得する 2 つのシナリオが関係します。

  • SIGILL、SIGTRAP、SIGABRT、または SIGSEGV エラーにより、Ceph プロセスが予期せず終了した場合。

または

  • 手動の場合。たとえば、Ceph プロセスが高い CPU サイクルを消費したり、応答がないなど、問題を手動でデバッグする場合。

前提条件

  • Ceph コンテナーを実行するコンテナーノードへの root レベルのアクセス。
  • 適切なデバッグパッケージのインストール
  • GNU Project Debugger (gdb) パッケージのインストール。

手順

  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
    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
  2. Ceph Monitors および Ceph Managers のコアダンプファイルを手動でキャプチャーするには、以下を実行します。

    1. コンテナーから Ceph デーモンの ceph-mon パッケージの詳細を取得します。

      Red Hat Enterprise Linux 7:

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

      Red Hat Enterprise Linux 8:

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

      NAME を、Ceph コンテナーの名前に置き換えます。

    2. バックアップコピーを作成し、ceph-mon@.service ファイルを編集するために開きます。

      [root@mon]# cp /etc/systemd/system/ceph-mon@.service /etc/systemd/system/ceph-mon@.service.orig
    3. ceph-mon@.service ファイルで、これらの 3 つのオプションを [Service] セクションに追加します。各オプションは 1 行ずつ追加します。

      --pid=host \
      --ipc=host \
      --cap-add=SYS_PTRACE \

      [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

    4. Ceph Monitor デーモンを再起動します。

      構文

      systemctl restart ceph-mon@MONITOR_ID

      MONITOR_ID を Ceph Monitor の ID 番号に置き換えます。

      [root@mon]# systemctl restart ceph-mon@1

    5. Ceph Monitor コンテナーに gdb パッケージをインストールします。

      Red Hat Enterprise Linux 7:

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

      Red Hat Enterprise Linux 8:

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

      MONITOR_ID を Ceph Monitor の ID 番号に置き換えます。

    6. プロセス ID を検索します。

      構文

      ps -aef | grep PROCESS | grep -v run

      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

    7. コアダンプファイルを生成します。

      構文

      gcore ID

      ID を、前の手順で取得した失敗したプロセスの ID に置き換えます (例: 18110)。

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

    8. コアダンプファイルが正しく生成されていることを確認します。

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

    9. Ceph Monitor コンテナー外部でコアダンプファイルをコピーします。

      Red Hat Enterprise Linux 7:

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

      Red Hat Enterprise Linux 8:

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

      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
    11. Ceph Monitor デーモンを再起動します。

      構文

      systemctl restart ceph-mon@MONITOR_ID

      MONITOR_ID を Ceph Monitor の ID 番号に置き換えます。

      [root@mon]# systemctl restart ceph-mon@1

    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

      Red Hat Enterprise Linux 8:

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

      NAME を、Ceph コンテナーの名前に置き換えます。

    2. Ceph コンテナーが実行しているノードに、同じバージョンの ceph-osd パッケージ用の Ceph パッケージをインストールします。

      Red Hat Enterprise Linux 7:

      [root@osd]# yum install ceph-osd

      Red Hat Enterprise Linux 8:

      [root@osd]# dnf install ceph-osd

      必要に応じて、適切なリポジトリーを最初に有効にします。詳細は、インストールガイドの Red Hat Ceph Storage の有効化 セクションを参照してください。

    3. 障害が発生したプロセスの ID を検索します。

      ps -aef | grep PROCESS | grep -v run

      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
    4. コアダンプファイルを生成します。

      gcore ID

      ID を、前の手順で取得した失敗したプロセスの ID に置き換えます (例: 18110)。

      [root@osd]# gcore 18110
      warning: target file /proc/18110/cmdline contained unexpected null characters
      Saved corefile core.18110
    5. コアダンプファイルが正しく生成されていることを確認します。

      [root@osd]# ls -ltr
      total 709772
      -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110
    6. Red Hat サポートが分析するコアダンプファイルをアップロードする場合は、次のステップを参照してください。
  4. Red Hat サポートケースに分析用のコアダンプファイルをアップロードします。詳細は、Red Hat サポートエンジニアへの情報の提供 を参照してください。

11.3.4. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.