Solaris のシステム管理 (上級編)

第 27 章 コアファイルの管理 (手順)

この章では、coreadm コマンドを使って、コマンドファイルを管理する方法について説明します。

コアファイルの管理に関連する手順の詳細については、コアファイルの管理 (作業マップ)を参照してください。

コアファイルの管理 (作業マップ)

作業 

説明 

参照先 

1. 現在のコアダンプ構成を表示する  

coreadm コマンドを使用して、現在のコアダンプ構成を変更する

現在のコアダンプ構成を表示する方法

2. コアダンプ構成を変更する 

次のいずれかの手順を実行して、コアダンプ構成を変更する 

 

 

コアファイル名パターンを設定する 

コアファイル名パターンを設定する方法

 

プロセス別コアファイルのパスを有効にする 

プロセス別コアファイルパスを有効にする方法

 

グローバルのコアファイルのパスを有効にする 

グローバルのコアファイルパスを有効にする方法

3. コアダンプファイルを調べる 

proc ツールを使用して、コアダンプファイルを表示する

コアファイルの検査

コアファイルの管理の概要

コアファイルは、プロセスまたはアプリケーションが異常終了したときに生成されます。コアファイルは coreadm コマンドで管理します。

たとえば、coreadm コマンドを使用して、プロセスコアファイルをすべて同じシステムディレクトリに置くようにシステムを構成できます。Solaris のプロセスやデーモンが異常終了した場合に、特定のディレクトリにあるコアファイルを調べればよいため、問題の追跡が容易になります。

構成可能なコアファイルのパス

次の 2 つの構成可能な新しいコアファイルのパスは、個別に有効または無効にすることができます。

プロセスが異常終了すると、以前の Solaris リリースと同じように core ファイルが現在のディレクトリに作成されます。しかし、たとえば、グローバルコアファイルのパスが有効で /corefiles/core に設定されていると、プロセスが終了するたびにコアファイルが 2 つ、1 つは現在の作業ディレクトリに、1 つは /corefiles ディレクトリにそれぞれ作成されます。

デフォルトでは、setuid プロセスは、グローバルの設定やプロセス別のパスを使ってコアファイルを生成することはありません。

拡張されたコアファイル名

グローバルコアファイルディレクトリが有効な場合、次の表に示す変数を使って core ファイルを相互に区別できます。

変数名 

変数の定義 

%p

プロセス ID 

%u

実効ユーザー ID 

%g

実効グループ ID 

%f

実行可能ファイル名 

%n

システムノード名。uname -n の出力と同じ

%m

マシン名。uname -m での出力と同じ

%t

time(2) システム呼び出しの 10 進数

%%

リテラル % 

たとえば、グローバルコアファイルパスが次のように設定されている場合、

/var/core/core.%f.%p

PID 12345sendmail プロセスが異常終了すると、次の core ファイルが作成されます。

/var/core/core.sendmail.12345

コアファイル名パターンの設定

コアファイル名パターンは、グローバルに設定したりプロセス単位で設定したりできます。さらに、この設定をシステムリブート後も有効になるように保存するかどうかを指定できます。

たとえば、次の coreadm コマンドでは、init プロセスで起動されたすべてのプロセスに対しグローバルのコアファイルパターンを設定します。このパターンは複数のシステムリブート後も有効です。


$ coreadm -i /var/core/core.%f.%p

グローバルのコア値は /etc/coreadm.conf ファイルに格納されるため、この設定値はシステムリブート後も有効になるように保存されます。

次の coreadm コマンドでは、すべてのプロセスに対しプロセス別コアファイル名パターンを設定します。


$ coreadm -p /var/core/core.%f.%p $$

$$ 記号には、現在実行中のシェルのプロセス ID を指定します。プロセス別コアファイル名パターンは、すべての子プロセスに継承されます。

グローバルまたはプロセス別のコアファイル名パターンを設定したら、これを coreadm -e コマンドで有効にする必要があります。詳細については次の手順を参照してください。

このコマンドをユーザーの $HOME/.profile または .login ファイルに入れておけば、ユーザーのログインセッションで実行するすべてのプロセスに対しコアファイル名パターンを設定できます。

setuid プログラムがコアファイルを作成できるようにする

coreadm コマンドを使って setuid プログラムを有効または無効にすれば、次の設定を行うことによって、すべてのシステムプロセスに対して、または各プロセスに対してコアファイルを作成できます。

デフォルトでは、両方のフラグが無効になっています。セキュリティ上の理由により、グローバルコアファイルパスは、/ で始まるフルパス名であることが必要です。スーパーユーザーがプロセス別コアファイルを無効にすると、個別のユーザーがコアファイルを得ることはできなくなります。

setuid コアファイルはスーパーユーザーによって所有され、スーパーユーザーだけに読み取り/書き込み権が与えられます。通常ユーザーは、たとえ setuid コアファイルを生成したプロセスを所有していても、それらのファイルにアクセスできません。

詳細については、coreadm(1M) のマニュアルページを参照してください。

現在のコアダンプ構成を表示する方法

現在のコアダンプ構成を表示するには、オプションを指定しないで coreadm コマンドを実行します。


$ coreadm
               global core file pattern: /var/core/core.%f.%p
                 init core file pattern: core
                      global core dumps: enabled
                 per-process core dumps: enabled
                global setid core dumps: enabled
           per-process setid core dumps: disabled
               global core dump logging: disabled

コアファイル名パターンを設定する方法

  1. プロセス別コアファイルを設定するのか、グローバルコアファイルを設定するのかを決めて、次のどちらかの手順に従います。

    1. プロセス別コアファイル名パターンを設定します。


      $ coreadm -p $HOME/corefiles/%f.%p $$
      
    2. グローバルコアファイル名パターンを設定します。

      まずスーパーユーザーになる必要があります。


      # coreadm -g /var/corefiles/%f.%p
      

プロセス別コアファイルパスを有効にする方法

  1. スーパーユーザーになります。

  2. プロセス別コアファイルパスを有効にします。


    # coreadm -e process
    
  3. 現在のプロセスのコアファイルパスを表示して構成を確認します。


    $ coreadm $$
    1180:   /home/kryten/corefiles/%f.%p

グローバルのコアファイルパスを有効にする方法

  1. スーパーユーザーになります。

  2. グローバルのコアファイルパスを有効にします。


    # coreadm -e global -g /var/core/core.%f.%p
    
  3. 現在のプロセスのコアファイルパスを表示して構成を確認します。


    # coreadm
          global core file pattern: /var/core/core.%f.%p
            init core file pattern: core
                 global core dumps: enabled
            per-process core dumps: enabled
           global setid core dumps: disabled
      per-process setid core dumps: disabled
          global core dump logging: disabled

コアファイルの問題解決

エラーメッセージ

 
NOTICE: 'set allow_setid_core = 1' in /etc/system is obsolete
NOTICE: Use the coreadm command instead of 'allow_setid_core'
エラーの発生原因

setuid コアファイルを許容する古いパラメータが /etc/system ファイルにあります。

解決方法

/etc/system ファイルから allow_setid_core=1 を削除し、coreadm コマンドを使ってグローバル setuid コアファイルの設定を有効にします。

コアファイルの検査

一部の proc ツールが拡張されてプロセスのコアファイルやライブプロセスが調べられるようになりました。proc ツールは、/proc ファイルシステムの機能を操作するユーティリティです。

現在、コアファイルを処理できるツールは /usr/proc/bin ディレクトリにある pstackpmapplddpflagspcred です。これらのツールを使用するには、プロセス ID を指定するように、コアファイルの名前をコマンド行に指定します。

proc ツールを使用してコアファイルを調べる方法については、proc(1) のマニュアルページを参照してください。

例 — proc ツールを使用したコアファイルの検査


$ ./a.out
Segmentation Fault(coredump)
$ /usr/proc/bin/pstack ./core
core './core' of 19305: ./a.out
 000108c4 main     (1, ffbef5cc, ffbef5d4, 20800, 0, 0) + 1c
 00010880 _start   (0, 0, 0, 0, 0, 0) + b8