journald RuntimeMaxUse 被忽略,配額綁定到 RuntimeMaxFileSize
設置
在核心 4.19.62 上使用 systemd 244 (244.5+)。
我想將總日誌儲存大小設置為 100MB。Journald 設置為易失性儲存,因此日誌結束,
/run/log/journal/...
並且應該使用RuntimeMaxUse在****/etc/systemd/journald.conf中設置儲存配額,如下所示:[Journal] Storage=volatile RuntimeMaxUse=100M RuntimeMaxFileSize=2M
通過調整這些配置值,日誌日誌大小和配額確實會發生變化,並且 journalctl 中的啟動消息也會顯示變化。
在配置值更改之間,我停止 systemd-journald.service,刪除所有
system*
文件/run/log/journal/...
並重新啟動服務。注意:當
Storage=persistent
和日誌使用時/var/log/journal/
,等效的SystemMaxUse得到正確尊重。這似乎只是 volatile/RuntimeMaxUse 中的一個錯誤。觀察到的錯誤
Runtime MaxUse (100M) 被忽略。只要 Runtime MaxFileSize小於 32M ,日誌配額就設置為64MB 。
如果 Runtime MaxFileSize設置為大於 32M,則日誌配額設置為該值的兩倍。
在這兩種情況下,執行時MaxUse似乎都被忽略了。
這是 journald/systemd 配置處理中的錯誤嗎?為什麼 Runtime MaxUse被忽略,而使用 64M 或 double Runtime MaxFileSize作為日誌配額?
我看到日誌源中有幾個地方可以將 max_use 設置為雙倍 max_size:
- https://github.com/systemd/systemd/blob/v244/src/journal/journal-file.c#L3747
- https://github.com/systemd/systemd/blob/v244/src/journal/journal-file.c#L3772
錯誤範例
設置了64M 的配額(
RuntimeMaxUse=100M
而RuntimeMaxFileSize=2M
不是我要求的 100M),如日誌啟動消息中所示:systemd-journald[20312]: Runtime Journal (/run/log/journal/...) is 2.0M, max 64.0M, 62.0M free. -- Runtime Journal (/run/log/journal/...) is currently using 2.0M. -- Maximum allowed usage is set to 64.0M. -- Leaving at least 1.5G free (of currently available 31.2G of disk space). -- Enforced usage limit is thus 64.0M, of which 62.0M are still available.
使用
RuntimeMaxUse=100M
andRuntimeMaxFileSize=31M
,仍然使用 64M:systemd-journald[20989]: Runtime Journal (/run/log/journal/...) is 8.0M, max 64.0M, 56.0M free. -- Runtime Journal (/run/log/journal/...) is currently using 8.0M. -- Maximum allowed usage is set to 64.0M. -- Leaving at least 1.5G free (of currently available 31.2G of disk space). -- Enforced usage limit is thus 64.0M, of which 56.0M are still available.
使用
RuntimeMaxUse=100M
andRuntimeMaxFileSize=33M
,配額最終為 66M:systemd-journald[21557]: Runtime Journal (/run/log/journal/...) is 8.0M, max 66.0M, 58.0M free. -- Runtime Journal (/run/log/journal/...) is currently using 8.0M. -- Maximum allowed usage is set to 66.0M. -- Leaving at least 1.5G free (of currently available 31.2G of disk space). -- Enforced usage limit is thus 66.0M, of which 58.0M are still available.
使用
RuntimeMaxUse=100M
並且RuntimeMaxFileSize=200M
我們突破了 100M 的限制,400M 似乎來自 200M 的 RuntimeMaxFileSize 的兩倍:systemd-journald[25271]: Runtime Journal (/run/log/journal/...) is 8.0M, max 400.0M, 392.0M free. -- Runtime Journal (/run/log/journal/...) is currently using 8.0M. -- Maximum allowed usage is set to 400.0M. -- Leaving at least 1.5G free (of currently available 31.2G of disk space). -- Enforced usage limit is thus 400.0M, of which 392.0M are still available.
64M 來自一個我不知道的附加配置文件:
/lib/systemd/journald.conf.d/00-systemd-conf.conf
.刪除附加設置
RuntimeMaxUse=64M
後,我現在可以在/etc/systemd/journald.conf
.提示:在 journald 啟動時使用 strace 來查看它真正使用了哪些配置文件以及讀取它們的順序。這就是
/lib
配置文件最終顯示的方式。