Daily Grind

システム開発関連の忘備録です

コアダンプ設定

1.コアダンプ設定

■[Linux] coreファイルについて
 http://qiita.com/suzutsuki0220/items/aa84d7e2e8f37e867f3d
 
 システム起動時に起動するプロセスで、常にcoreファイルを出力するようにしたい場合
 
 initスクリプト(/etc/init.d/XXXX)で /etc/rc.d/init.d/functions を読み込む前に以下の行を追加する

   DAEMON_COREFILE_LIMIT=unlimited

 ※ /etc/rc.d/init.d/functions の中で DAEMON_COREFILE_LIMIT の値でulimitを実行するようになっている。
 functionsのスクリプトが無い環境の場合は、initスクリプトの中でulimitコマンドを実行するようにしてください


■ulimitの設定をOS再起動後も各デーモンに反映させる
 http://tsunokawa.hatenablog.com/entry/20130515/p1

 CentOS6系
   /etc/sysconfig/init

2.デーモン側でコアダンプさせる方法

 1のやり方とは別方法になるが、デーモン側でコアダンプさせる方法もある。

#include <sys/resource.h>
#include <sys/prctl.h>

struct rlimit	lmtbuff;

ret = getrlimit(RLIMIT_CORE, &lmtbuff);

if (!ret) {
	syslog(LOG_INFO, 
		"INFO! [debug] rlimit max=[%lu] cur=[%lu].",
		lmtbuff.rlim_max,
		lmtbuff.rlim_cur);

	if ((lmtbuff.rlim_max != RLIM_INFINITY)	|| 
		(lmtbuff.rlim_cur != RLIM_INFINITY)) {

		ret = setrlimit(RLIMIT_CORE, &lmtbuff);

		if (ret){
			syslog(LOG_INFO,
			"INFO! [debug] setrlimit failure. (%s)",
			strerror(errno));
		}
	}
}
else {
	syslog(LOG_INFO,
		"INFO! [debug] getrlimit failure. (%s)",
		strerror(errno));
}

ret = prctl(PR_SET_DUMPABLE, 1);

if (ret){
		syslog(LOG_INFO, 
		"INFO! [debug] prctl failure. (%s)", 
		strerror(errno));
}