2023年08月14日
Tweet
milter-manager がとても便利だと知りました。
そのためインストールしていくつかの苦労もしつつ設定を行いました。
※環境は Ubuntu 22.04
動作確認のコマンドを実行すると、インストール直後は accept となりました。
sudo -u postfix milter-test-server -s unix:/var/spool/postfix/milter-manager/milter-manager.sock
しかし時間が経過すると何も設定を変更していないのに temporary-failure となってしまうのです。
何もしていないのにできなくなった! という状態でした。
最初は milter-manager が悪いのか、それ以外が悪いのか全くわかりませんでした。
結果的には clamav だとわかったのですが、切り分け方からメモしておきます。
結果が temporary-failure となったことがわかった状態で、以下の通りモジュールをすべて無効化しました。
#vi /etc/milter-manager/milter-manager.local.conf
define_milter("clamav-milter") do |milter|
milter.enabled = false
end
define_milter("opendkim") do |milter|
milter.enabled = false
end
define_milter("spamass-milter") do |milter|
milter.enabled = false
end
この状態で milter-manager を再起動
動作確認をすると、 accept となりました。
一つずつモジュールを有効化していくと、clamav を有効にすると failure となりました。
これによって clamav に原因があることがわかりました。
※本当は他にも紆余曲折ありましたが、以下のコマンドで oom-killer が発動していることがわかりました。
# systemctl status clamav-daemon.service
× clamav-daemon.service - Clam AntiVirus userspace daemon
Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/clamav-daemon.service.d
└─extend.conf
Active: failed (Result: oom-kill) since Sat 2023-08-XX XX:14:07 JST; 1h 9min ago
サーバーのログも以下の通り
# less /var/log/syslog
<抜粋>
Aug XX XX:14:07 sv01 kernel: [255699.328652] Out of memory: Killed process 13616 (clamd) total-vm:2659144kB, anon-rss:771660kB, file-rss:3180kB, shmem-rss:0kB, UID:118 pgtables:4808kB oom_score_adj:0
Aug XX XX:14:07 sv01 systemd[1]: clamav-daemon.service: A process of this unit has been killed by the OOM killer.
Aug XX XX:14:07 sv01 systemd[1]: clamav-daemon.service: Main process exited, code=killed, status=9/KILL
Aug XX XX:14:07 sv01 systemd[1]: clamav-daemon.service: Failed with result 'oom-kill'.
Aug XX XX7:14:07 sv01 systemd[1]: clamav-daemon.service: Consumed 37.455s CPU time.
利用可能なメモリは、VPSということもあり、非常に小さい環境です。1Gぐらいしかありません。
※以下の結果は clamav が稼働している状態です。
# free -h
total used free shared buff/cache available
Mem: 957Mi 625Mi 69Mi 21Mi 262Mi 168Mi
Swap: 1.9Gi 1.2Gi 723Mi
ClamAVがメモリを利用しすぎて oom-killer になったことはわかりました。
しかしなぜ??
調べてみると、 clamav の ウイルス定義ファイルの再読込を行うとき、既存の読み込み+新しい読み込みとなり、DBが一時的に2倍消費されるようなのです。
スキャンをしているときに、シームレスに新しいエンジンに移行させることができるようです。
私の環境ではそこまでシビアではいこと、そもそもメモリが少ないので、この機能がONになっていると上記の通り強制終了してしまうため、OFFにしました。
#vi /etc/clamav/clamd.conf
# 追記
ConcurrentDatabaseReload no
今までは24時間以内に必ず oom-killer になってしまいました。
これによって、少なくとも数日間は問題無く動作しています。
そのためインストールしていくつかの苦労もしつつ設定を行いました。
※環境は Ubuntu 22.04
動作確認のコマンドを実行すると、インストール直後は accept となりました。
sudo -u postfix milter-test-server -s unix:/var/spool/postfix/milter-manager/milter-manager.sock
しかし時間が経過すると何も設定を変更していないのに temporary-failure となってしまうのです。
何もしていないのにできなくなった! という状態でした。
最初は milter-manager が悪いのか、それ以外が悪いのか全くわかりませんでした。
結果的には clamav だとわかったのですが、切り分け方からメモしておきます。
結果が temporary-failure となったことがわかった状態で、以下の通りモジュールをすべて無効化しました。
#vi /etc/milter-manager/milter-manager.local.conf
define_milter("clamav-milter") do |milter|
milter.enabled = false
end
define_milter("opendkim") do |milter|
milter.enabled = false
end
define_milter("spamass-milter") do |milter|
milter.enabled = false
end
この状態で milter-manager を再起動
動作確認をすると、 accept となりました。
一つずつモジュールを有効化していくと、clamav を有効にすると failure となりました。
これによって clamav に原因があることがわかりました。
※本当は他にも紆余曲折ありましたが、以下のコマンドで oom-killer が発動していることがわかりました。
# systemctl status clamav-daemon.service
× clamav-daemon.service - Clam AntiVirus userspace daemon
Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/clamav-daemon.service.d
└─extend.conf
Active: failed (Result: oom-kill) since Sat 2023-08-XX XX:14:07 JST; 1h 9min ago
サーバーのログも以下の通り
# less /var/log/syslog
<抜粋>
Aug XX XX:14:07 sv01 kernel: [255699.328652] Out of memory: Killed process 13616 (clamd) total-vm:2659144kB, anon-rss:771660kB, file-rss:3180kB, shmem-rss:0kB, UID:118 pgtables:4808kB oom_score_adj:0
Aug XX XX:14:07 sv01 systemd[1]: clamav-daemon.service: A process of this unit has been killed by the OOM killer.
Aug XX XX:14:07 sv01 systemd[1]: clamav-daemon.service: Main process exited, code=killed, status=9/KILL
Aug XX XX:14:07 sv01 systemd[1]: clamav-daemon.service: Failed with result 'oom-kill'.
Aug XX XX7:14:07 sv01 systemd[1]: clamav-daemon.service: Consumed 37.455s CPU time.
利用可能なメモリは、VPSということもあり、非常に小さい環境です。1Gぐらいしかありません。
※以下の結果は clamav が稼働している状態です。
# free -h
total used free shared buff/cache available
Mem: 957Mi 625Mi 69Mi 21Mi 262Mi 168Mi
Swap: 1.9Gi 1.2Gi 723Mi
ClamAVがメモリを利用しすぎて oom-killer になったことはわかりました。
しかしなぜ??
調べてみると、 clamav の ウイルス定義ファイルの再読込を行うとき、既存の読み込み+新しい読み込みとなり、DBが一時的に2倍消費されるようなのです。
スキャンをしているときに、シームレスに新しいエンジンに移行させることができるようです。
私の環境ではそこまでシビアではいこと、そもそもメモリが少ないので、この機能がONになっていると上記の通り強制終了してしまうため、OFFにしました。
#vi /etc/clamav/clamd.conf
# 追記
ConcurrentDatabaseReload no
今までは24時間以内に必ず oom-killer になってしまいました。
これによって、少なくとも数日間は問題無く動作しています。
stock_value at 11:32│Comments(0)│技術