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 のサービスとして起動したプロセスのスタックオーバフローを抑制する方法です。
...
スポンサーリンク
スポンサーリンク