私はCentOS 6を使用していて、開発中のアプリケーションのコアダンプを有効にしようとしています。私は置きました:
ulimit -H -c unlimited >/dev/null
ulimit -S -c unlimited >/dev/null
私のbashプロファイルに追加しましたが、コアダンプはまだ生成されていません(新しいターミナルで)。
/etc/security/limits.confも変更して、すべてのユーザーのソフト制限がゼロになるようにしました。
出力するコアファイルの場所を設定するにはどうすればよいですか?場所を指定して、ダンプが生成された時刻をファイル名の一部として追加したかったのですか?
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つの方法があります。
/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
Abrtdサービスを停止します。 kernel.core_pattern
は上書きされません。 -(私はテストしたことがありません)。
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アプリケーションのデバッグ手法/コアファイル