Linux

Linux サービス経由の起動プロセスのコアダンプ抑制

*記事内に商品プロモーションを含む場合があります

CentOS7/8 , Ubuntu でsystemd のサービスとして起動したプロセスのコアダンプ(coreファイル出力)を抑制する方法です。

systemd のサービスとして起動したプロセスでは、ulimit の設定が効きません。

設定の確認

ulimitで確認

プロセスが実行されるアカウントで ulimit -a を実行して確認します。

$
$ ulimit -a
core file size          (blocks, -c) 0

0(ゼロ)で、core出力は抑制されていますが、systemd のサービス経由で起動されたプロセスに対しては効きません。

/etc/systemd/system.confを確認

/etc/systemd/system.conf

DumpCore=yes のときにcoreファイルが出力されます。

$
$ cat  /etc/systemd/system.conf
 
[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#DumpCore=yes

DumpCore=yes の指定はありませんが、効きません。

対応方法

systemd のサービスとして起動したプロセスのリソース制限値には /etc/security/limits.conf などで設定している制限値が適用されません。
(systemdサービスにはPAM Limitが適用されない)

systemd のサービスとして起動したプロセスのリソース制限値は xxxx.serviceファイル内に設定します。

個々のサービスで設定確認

サービス名が、XXXXの場合。

#
# systemctl show XXXX | grep CORE
LimitCORE=infinity

 か
LimitCORE=18446744073709551615

0(ゼロ)ではないのでコア出力されます。

systemdファイルの修正

#vi /lib/systemd/system/XXXX.service

[Service]
LimitCORE=0 ←追加

サービスの設定再読み込み(リロード)

#

# (1)サービス停止
# systemctl stop XXXX

#(2)デーモンの設定をリロード
# systemctl daemon-reload

#(3)サービス起動
# systemctl start XXXX


#(4)値確認
# systemctl show XXXX | grep CORE
LimitCORE=0

あとがき

最近のLinuxは、systemdに変更になり、Webで検索しても古い情報と混ざっていて、何が正解かすぐには分かりにくいですね。

Linux サービス経由の起動プロセスのスタックサイズ変更(スタックオーバフロー回避)CentOS 7/8 , Ubuntu でsystemd のサービスとして起動したプロセスのスタックオーバフローを抑制する方法です。 ...