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-rpmsCeph ノードの種別に応じて、
DAEMONをosdまたはmonに置き換えます。Red Hat Enterprise Linux 8:
subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-debug-rpmsceph-debuginfoパッケージをインストールします。[root@mon ~]# yum install ceph-debuginfo
gdbパッケージがインストールされていることを確認します。インストールされていない場合は、インストールします。[root@mon ~]# yum install gdb
デプロイメントのタイプに基づいて、手順を続けます。
11.3.2. ベアメタルデプロイメントでの判読可能なコアダンプファイルの生成 リンクのコピーリンクがクリップボードにコピーされました!
ベアメタルで Red Hat Ceph Storage を使用する場合、以下の手順に従ってコアダンプファイルを生成します。
手順
Ceph のコアダンプファイルの生成を有効にします。
/etc/systemd/system.confファイルに以下のパラメーターを追加して、コアダンプファイルに適切なulimitsを設定します。DefaultLimitCORE=infinityデフォルトでは、
/lib/systemd/system/CLUSTER_NAME-DAEMON@.serviceにある Ceph デーモンサービスファイルのPrivateTmp=trueパラメーターをコメントアウトします。[root@mon ~]# PrivateTmp=truesuid_dumpableフラグを2に設定して、Ceph デーモンがダンプコアファイルを生成できるようにします。[root@mon ~]# sysctl fs.suid_dumpable=2コアダンプファイルの場所を調整します。
[root@mon ~]# sysctl kernel.core_pattern=/tmp/coreセクション
[Coredump]の下に次の行を追加して、/ etc/systemd/coredump.confファイルを変更します。ProcessSizeMax=8G ExternalSizeMax=8G JournalSizeMax=8Gsystemdサービスを再読み込みし、変更を反映します。[root@mon ~]# systemctl daemon-reload変更を反映するために、Ceph デーモンを再起動します。
[root@mon ~]# systemctl restart ceph-DAEMON@IDデーモンタイプ (
osdまたはmon) とその ID (OSD の場合は数値、または Monitors の短縮ホスト名) を指定します。以下に例を示します。[root@mon ~]# systemctl restart ceph-osd@1
- デーモンを再度起動するなど、障害を再現します。
GNU Debugger (GDB) を使用して、アプリケーションのコアダンプファイルから判読可能なバックトレースを生成します。
gdb /usr/bin/ceph-DAEMON /tmp/core.PID以下のように、デーモンのタイプと失敗したプロセスの PID を指定します。
$ gdb /usr/bin/ceph-osd /tmp/core.123456GDB コマンドプロンプトで
set pag off子マンとおよびset log onコマンドを入力し、ページングを無効にし、ファイルへのロギングを有効にします。(gdb) set pag off (gdb) set log onbacktraceを入力して、thr a a bt fullコマンドをプロセスのすべてのスレッドに適用します。(gdb) thr a a bt fullバックトレースが生成されたら、
set log offを入力して電源をオフにします。(gdb) set log off-
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) パッケージのインストール。
手順
SIGILL、SIGTRAP、SIGABRT、または SIGSEGV エラーにより、Ceph プロセスが予期せず終了した場合。
障害の発生した Ceph プロセスのあるコンテナーが実行しているノードの
systemd-coredumpサービスにコアパターンを設定します。以下に例を示します。[root@mon]# echo "| /usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" > /proc/sys/kernel/core_patternCeph プロセスが原因でコンテナーに関する次の障害の有無を確認し、
/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 Managers のコアダンプファイルを手動でキャプチャーするには、以下を実行します。
コンテナーから Ceph デーモンの
ceph-monパッケージの詳細を取得します。Red Hat Enterprise Linux 7:
[root@mon]# docker exec -it NAME /bin/bash [root@mon]# rpm -qa | grep cephRed Hat Enterprise Linux 8:
[root@mon]# podman exec -it NAME /bin/bash [root@mon]# rpm -qa | grep cephNAME を、Ceph コンテナーの名前に置き換えます。
バックアップコピーを作成し、
ceph-mon@.serviceファイルを編集するために開きます。[root@mon]# cp /etc/systemd/system/ceph-mon@.service /etc/systemd/system/ceph-mon@.service.origceph-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.targetCeph Monitor デーモンを再起動します。
構文
systemctl restart ceph-mon@MONITOR_IDMONITOR_ID を Ceph Monitor の ID 番号に置き換えます。
例
[root@mon]# systemctl restart ceph-mon@1Ceph Monitor コンテナーに
gdbパッケージをインストールします。Red Hat Enterprise Linux 7:
[root@mon]# docker exec -it ceph-mon-MONITOR_ID /bin/bash sh $ yum install gdbRed Hat Enterprise Linux 8:
[root@mon]# podman exec -it ceph-mon-MONITOR_ID /bin/bash sh $ yum install gdbMONITOR_ID を Ceph Monitor の ID 番号に置き換えます。
プロセス ID を検索します。
構文
ps -aef | grep PROCESS | grep -v runPROCESS は、失敗したプロセス名 (例:
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コアダンプファイルを生成します。
構文
gcore IDID を、前の手順で取得した失敗したプロセスの ID に置き換えます (例:
18110)。例
[root@mon]# gcore 18110 warning: target file /proc/18110/cmdline contained unexpected null characters Saved corefile core.18110コアダンプファイルが正しく生成されていることを確認します。
例
[root@mon]# ls -ltr total 709772 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110Ceph Monitor コンテナー外部でコアダンプファイルをコピーします。
Red Hat Enterprise Linux 7:
[root@mon]# docker cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmpRed Hat Enterprise Linux 8:
[root@mon]# podman cp ceph-mon-MONITOR_ID:/tmp/mon.core.MONITOR_PID /tmpMONITOR_ID を Ceph Monitor の ID 番号に置き換え、MONITOR_PID をプロセス ID 番号に置き換えます。
ceph-mon@.serviceファイルのバックアップコピーを復元します。[root@mon]# cp /etc/systemd/system/ceph-mon@.service.orig /etc/systemd/system/ceph-mon@.serviceCeph Monitor デーモンを再起動します。
構文
systemctl restart ceph-mon@MONITOR_IDMONITOR_ID を Ceph Monitor の ID 番号に置き換えます。
例
[root@mon]# systemctl restart ceph-mon@1- Red Hat サポートが分析するコアダンプファイルをアップロードする場合は、ステップ 4 を参照してください。
Ceph OSD のコアダンプファイルを手動でキャプチャーするには、以下を実行します。
コンテナーから Ceph デーモンの
ceph-osdパッケージの詳細を取得します。Red Hat Enterprise Linux 7:
[root@osd]# docker exec -it NAME /bin/bash [root@osd]# rpm -qa | grep cephRed Hat Enterprise Linux 8:
[root@osd]# podman exec -it NAME /bin/bash [root@osd]# rpm -qa | grep cephNAME を、Ceph コンテナーの名前に置き換えます。
Ceph コンテナーが実行しているノードに、同じバージョンの
ceph-osdパッケージ用の Ceph パッケージをインストールします。Red Hat Enterprise Linux 7:
[root@osd]# yum install ceph-osdRed Hat Enterprise Linux 8:
[root@osd]# dnf install ceph-osd必要に応じて、適切なリポジトリーを最初に有効にします。詳細は、インストールガイドの Red Hat Ceph Storage の有効化 セクションを参照してください。
障害が発生したプロセスの ID を検索します。
ps -aef | grep PROCESS | grep -v runPROCESS は、失敗したプロセス名 (例:
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コアダンプファイルを生成します。
gcore IDID を、前の手順で取得した失敗したプロセスの ID に置き換えます (例:
18110)。[root@osd]# gcore 18110 warning: target file /proc/18110/cmdline contained unexpected null characters Saved corefile core.18110コアダンプファイルが正しく生成されていることを確認します。
[root@osd]# ls -ltr total 709772 -rw-r--r--. 1 root root 726799544 Mar 18 19:46 core.18110- Red Hat サポートが分析するコアダンプファイルをアップロードする場合は、次のステップを参照してください。
- Red Hat サポートケースに分析用のコアダンプファイルをアップロードします。詳細は、Red Hat サポートエンジニアへの情報の提供 を参照してください。
11.3.4. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Customer Portal の gdb を使用して、アプリケーションコアから読み取り可能なバックトレースを生成する方法
- Red Hat カスタマーポータルの アプリケーションがクラッシュまたはセグメンテーション違反が発生した時にコアファイルのダンプを有効にする