無制限のコアサイズの欠点?コアファイルはどこに行きますか?


8

セグメンテーション違反で時々クラッシュするアップスタートジョブがあり、コアダンプについていくつか質問があります。

まず、スタンザを追加する必要があります。

limit core unlimited unlimited

無制限のコアサイズを許可することの欠点はありますか?有限の制限が良いでしょうか?

次に、コアファイルはどこに行きますか?デフォルトが標準的または論理的な場所でない場合、それを他の場所に表示するにはどうすればよいですか?


アップスタートジョブで更新してください
カシム2013年

回答:


6

無制限のコアダンプはほとんどの状況でお勧めできませんが、技術的には問題ありません。コアダンプには、現在のプロセスにある「すべてのメモリ」しかありません。したがって、多くても、RAM +スワップと同じ大きさになるだけです。うまくいけば、それ以上の空き容量があります。

実際には、RAMとスワップの合計に比べて「小さめ」である必要があります。

ファイルは「現在のディレクトリ」にあるはずです。通常は/であるchdirを行わないupstartタスクの場合。彼らがディレクトリを変更する場合は、自分で自分を追い詰めてください。ただし、それらのパスをハードコーディングすることはできます。

/proc/sys/kernel/core_pattern「パターン」を確認できるはずです。パターンを次のように設定するとecho "/var/log/core" > /proc/sys/kernel/core_pattern、すべてのコアが/ var / logに含まれるようになります


5

コアファイルは、プロセスが予期せず終了したときにオペレーティングシステムによって作成されるプロセスのイメージです。バグ、またはCPUやメモリ保護メカニズムの違反が原因でプログラムが正しく動作しない場合、コアファイルが作成されます。オペレーティングシステムはプログラムを強制終了し、コアファイルを作成します。

このファイルは、プロセスの何が問題であったかを判断するのに非常に役立ちます。使用しているLinuxのディストリビューションとバージョンに応じて、コアファイルの生成をデフォルトで有効にできます。

コアファイルがまったく不要な場合は、起動ファイルに "ulimit -c 0"を設定します。多くのシステムではこれがデフォルトです。で/etc/profileあなたが見つけることが

切り捨てられたファイルは実用的ではないため、Linuxコアファイルのサイズを「無制限」に設定します。

Usage of ulimit         Action
ulimit -c               # check the current corefile limit
ulimit -c 0             # turn off corefiles
ulimit -c x             # set the maximum corefile size to x number of 1024bytes
ulimit -c unlimited     # turn on corefiles with unlimited size
ulimit -n unlimited     # allows an unlimited number of open file descriptors
ulimit -p               # size of pipes
ulimit -s               # maximum native stack size for a process
ulimit -u               # number of user processes
help ulimit             #list of other options

コアファイルは、プロセスの現在の作業ディレクトリに配置されます。JVMプロセスへの書き込み権限と空きディスク領域が必要です。

カーネルレベルに応じて、コアファイルにわかりやすい名前を付ける便利なカーネルオプションを使用できます。rootユーザーとしてオプションsysctl -w kernel.core_users_pid = 1を使用すると、コアファイルの名前が「Core.PID」の形式になります。

ulimit -S -c 0 > /dev/null 2>&1

コアファイルが必要な場合は、独自の.bash_profileでそれをリセットする必要があります。

ulimit -c 50000

コアファイルは許可されますが、50,000バイトに制限されます。

コアファイルをより詳細に制御できます /proc/sys/kernel/

たとえば、次の方法でpidにタグ付けされたものを削除できます

echo "0" > /proc/sys/kernel/core_uses_pid 

コアファイルの名前は「コア」になります。人々はそのようなことをするので、ユーザーはコアダンプを生成したくないディレクトリに「コア」という名前の書き込み不可ファイルを置くことを選択できます。これは、ディレクトリ(mkdirコア)またはファイル(touch core; chmod 000コア)にすることができます。

しかし、おそらくもっと興味深いのは、次のことができることです。

mkdir /tmp/corefiles 
chmod 777 /tmp/corefiles 
echo "/tmp/corefiles/core" > /proc/sys/kernel/core_pattern 

その後、すべての/tmp/corefilesコアファイルが破棄されます(これを行う場合は、core_uses_pidを変更しないでください)。

これを簡単なスクリプトでテストします。

# script that dumps core 
kill -s SIGSEGV $$ 

Ubuntuでは、コアファイルの作成はファイルを介して制御されます/etc/default/collectd。コアダンプの作成を有効にするには、次を設定します。

ENABLE_COREFILES=1

コアファイルの検索

デーモンがクラッシュすると、現在の作業ディレクトリにファイルが作成されます。デフォルトではpkglocalstatedir、つまりprefix/var/lib/collectdです。パッケージをインストールした場合、このディレクトリが最も考えられ/var/lib/collectdます。

出典:APローレンス、IBM

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