テスト環境で用意しているサーバで動作させているLogwatchからエラーを意味するアラートメールが届いたのでご報告です。
そのエラーは「exim paniclog on host has non-zero size」でした。
エラーのアラートが届く
ある日、テスト環境として利用しているsambaサーバからアラートメールを受信しました。
む?サーバがエラーか、と思い、メールを見てみると…
--------------------------------------------------------------
exim paniclog /var/log/exim4/paniclog on %hostname%.treedown.net has non-zero size, mail system might be broken. The last 10 lines are quoted below.
2019-03-xx 09:31:18 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 10:01:19 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 10:31:21 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 11:01:23 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 11:31:25 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 12:01:26 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 12:31:27 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 13:01:29 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 13:31:30 daemon: fork of queue-runner process failed: Cannot allocate memory
2019-03-xx 14:01:32 daemon: fork of queue-runner process failed: Cannot allocate memory
-------------------------------------------------------
冒頭が
「%hostname%.treedown.netのexim paniclog /var/log/exim4/paniclogのサイズが0以外で、メールシステムが壊れている可能性があります。 最後の10行は以下に引用されています。」
エラーメッセージは
「daemon:キューランナープロセスのforkに失敗しました:メモリを割り当てることができません」
原因
「Cannot allocate memory」とあるので、純粋に「プロセスが動作するために割り当てるメモリが足りないよ」ということになります。
単純にメモリを増やせばいいということになります。
このサーバはHyper-Vで動作し動的メモリを有効化しているので、「最大RAM」の値を増やして対処完了。
ゲストOSのメモリ割り当て値を変更するにはゲストOSをシャットダウンしておく必要があります。
メモリの設定値を変更したら、ゲストOSを再度起動して対処完了、とおもっていたけど、paniclogの対処はもう一つやることがありました。
メモリを増やしても届くエラー
対処した翌日に同じエラーメッセージを受け取ってしまいました。
メモリを増やしてもエラーが届く場合、エラーは解消したもののログファイル(paniclog)が残存しているために、エラーアラートメールが引き続き配送されることになります。
そのため、ログファイル(今回でいえば/var/log/exim4/paniclogファイル)を移動するなり削除するなりして、paniclogを存在しないような状態にしてやる必要があることになります。
そこで
rm /var/log/exim4/paniclog
なり
mv /var/log/exim4/paniclog %移動先%
なりで、/var/log/配下からpaniclogというファイルが存在しないようにしておきます。
これでアラートが管理者宛に飛ばなくなったので、ちゃんと対処完了したと判断できます。