dnf-makecache.timer を止めたらサーバが止まった話
デフォルトで dnf-makecache.timer が動いています。1時間おきにレポジトリのキャッシュを更新しているのですが、そんなことする必要ある? と思って止めたところ、後日、まさかのサーバが止まってしまいました。
教訓
dnf-makecache.timer は止めてはいけない。デフォルトのまま動かしておけ。
何が起きたのか?
dnf-automatic-notifyonly.timer が dnf update を実行したところ、メモリ不足になってサーバが止まりました。その時点では辛うじてログインできたのですが、手動で dnf update したところ、固まってしまいました。気長に待っていれば再対応の機会があったかもしれませんが、諸々考えて、強制再起動という判断になりました。
顛末
(2023-11-27 追記)
メモリが足りなくなって挙動がおかしくなる現象は libsolv
が原因でした。libsolv
はパッケージの依存関係を解決するライブラリで、dnf
の実行に必要です。
libsolv-0.7.25-1.fc38
の更新情報に以下の記述があります。
- Support complex deps in SOLVABLE_PREREQ_IGNOREINST
- Fix minimization not prefering installed packages in some cases
- Reduce memory usage in repo_updateinfoxml
- Fix lock-step interfering with architecture selection
- Fix choice rule handing for package downgrades
- Fix complex dependencies with an "else" part sometimes leading to unsolved dependencies
測定してみると、これまで dnf
の実行に 600MB 以上消費していましたが、150MB程度に軽減されています。