web-dev-qa-db-ja.com

コアダンプファイルの場所(および名前)を設定する方法

私はCentOS 6を使用していて、開発中のアプリケーションのコアダンプを有効にしようとしています。私は置きました:

ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null

私のbashプロファイルに追加しましたが、コアダンプはまだ生成されていません(新しいターミナルで)。

/etc/security/limits.confも変更して、すべてのユーザーのソフト制限がゼロになるようにしました。

出力するコアファイルの場所を設定するにはどうすればよいですか?場所を指定して、ダンプが生成された時刻をファイル名の一部として追加したかったのですか?

17
user997112

CentOS 6でコアダンプの場所を設定するには、/etc/sysctl.confを編集します。たとえば、/var/crashでコアダンプが必要な場合:

kernel.core_pattern = /var/crash/core-%e-%s-%u-%g-%p-%t

変数は次のとおりです。

%e ファイル名です
%g プロセスが実行されていたgidです
%p プロセスのpidです
%s ダンプを引き起こした信号です
%t ダンプが発生した時間です
%u プロセスが実行されていたuidです

また、/etc/sysconfig/initを追加する必要があります

DAEMON_COREFILE_LIMIT='unlimited'

新しい変更を適用します。

$ sysctl -p

しかし、この方法には注意すべき点があります。 /etc/sysctl.confに値が手動で指定されている場合でも、カーネルパラメーターkernel.core_patternが常にリセットされ、再起動時に次の構成に上書きされる場合:

|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e

つまり、abrtd.serviceが開始すると、kernel.core_patternは、abrt-addon-ccppがインストールされているシステムによって自動的に上書きされます。これを解決するには2つの方法があります。

  1. /etc/abrt/abrt.conf構成ファイルでDumpLocationオプションを設定します。宛先ディレクトリは、/var/crash構成ファイルでDumpLocation = /etc/abrt/abrt.confを設定することによって指定できます。sysctl kernel.core_patternの表示値は同じですが、実際にはコアファイルが/var/crashの下のディレクトリに作成されます。

    また、SELinuxを有効にしている場合は、以下を実行する必要があります。

    $ semanage fcontext -a -t public_content_rw_t "/var/crash(/.*)?"  
    $ setsebool -P abrt_anon_write 1
    

    そして最後にabrtd.serviceを再起動します:

    $ service abrtd.service restart
    
  2. Abrtdサービスを停止します。 kernel.core_patternは上書きされません。 -(私はテストしたことがありません)。

26
taliezin

Busyboxでコアダンプを生成するには、実行可能ファイルを実行する初期化スクリプトに以下のパラメーターを追加します。したがって、ソフトウェアを初期化して環境変数をエクスポートするたびに、以下の行をスクリプトにコピーして、クラッシュが発生した場合に備えてコアをダンプすることができます。

Busyboxでコアダンプの場所を設定するには、procファイルシステムを使用してコアファイルパスを設定できます。たとえば、/tmp/crash/corefilesにコアダンプが必要な場合:

mkdir -p /tmp/crash/corefiles
chmod 775 /tmp/crash/corefiles
echo "/tmp/crash/corefiles/%e.%s.core" > /proc/sys/kernel/core_pattern

変数は次のとおりです。

%e ファイル名です
%g プロセスが実行されていたgidです
%p プロセスのpidです
%s ダンプを引き起こした信号です
%t ダンプが発生した時間です
%u プロセスが実行されていたuidです

また、コアファイルサイズを設定する必要があります。コマンドの下でコアファイルサイズを無制限に設定します

ulimit -c unlimited

次に、プロセス内の各スレッドに設定されたコアファイルサイズを確認するために、

cat /proc/<PID>/limits

上記のコマンドの出力:

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        unlimited            unlimited            bytes     
Max open files            10000                10000                files     
Max address space         unlimited            unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             31868                31868                processes 
Max locked memory         65536                65536                bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       31868                31868                signals   
Max msgqueue size         819200               819200               bytes     
Max Nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us      

上記の出力からわかるように、最大​​コアファイルサイズは無制限に設定されています。

詳細については、このリンクにアクセスしてください。 Linuxアプリケーションのデバッグ手法/コアファイル

0
Ankit Raj