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


17

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

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

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

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

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


1
これが役に立つかもしれ:stackoverflow.com/a/16048288/2808351
dhag

回答:


27

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

しかし、この方法には注意が必要です。カーネルパラメータkernel.core_patternが常にリセットされ、再起動時に次の設定に上書きされた場合 /etc/sysctl.conf

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

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

  1. 構成ファイルの設定DumpLocationオプション/etc/abrt/abrt.conf。宛先ディレクトリは/var/crash/etc/abrt/abrt.conf構成ファイルでDumpLocation = を設定することで指定できます。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上書きされません。-(私はテストしたことがない)。


1
素晴らしい答え。EFIシステムでは、システムフラッシュにもダンプが記録されることに注意してください。
mikeserv

0

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アプリケーションのデバッグ手法/コアファイル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.