dnf upgradeがメモリ不足で失敗する問題をスワップ領域の設定で解決

はじめに

あるAmazon Linux 2023の環境でdnf upgradeを実行すると、プロセスが強制終了してしまう事象が発生しました。

# dnf upgrade --releasever=latest
Killed

この環境はLightsailで、EC2のような手軽なサイズ変更ができないため、別の方法で対応しました。

原因調査

まずは原因調査です。直近のOOMやジャーナルログを確認します。 OOM
dmesg -T | egrep -i 'oom|out of memory|killed process|dnf|python|rpm' | tail -n 80
ジャーナルログ
journalctl -k -b | egrep -i 'oom|out of memory|killed process' | tail -n 80
dnfのプロセスがOut of memoryでkillされたことがわかりました
Jan 29 12:09:48 prod-web1 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1001.slice/session-9.scope,task=dnf,pid=341952,uid=0
Jan 29 12:09:48 prod-web1 kernel: Out of memory: Killed process 341952 (dnf) total-vm:719788kB, anon-rss:100452kB, file-rss:4kB, shmem-rss:0kB, UID:0 pgtables:636kB oom_score_adj:0

不足しているメモリ領域を確保する

ディスク上にメモリのスワップ領域を作成して、利用できるメモリ領域を増やします。 ディスク容量が十分にあることを確認したあと、スワップファイルを作成します。
fallocate -l 2G /swapfile
権限設定
chmod 600 /swapfile
初期化
mkswap /swapfile
有効化
swapon /swapfile
再起動後も有効にする場合は以下のコマンドを実行しますが、今回はやりませんでした。
echo '/swapfile none swap defaults 0 0' >> /etc/fstab
領域が完成したか確認
swapon --show
NAME       TYPE      SIZE   USED PRIO
/dev/zram0 partition 407M 131.4M  100
/swapfile  file        2G   1.9M   -2
アップデートが成功しました
sudo dnf upgrade --releasever=latest
(略)
  systemtap-sdt-dtrace-5.2-1.amzn2023.0.5.x86_64                                                 tzdata-2025c-1.amz
  vim-common-2:9.1.1591-1.amzn2023.0.1.x86_64                                                    vim-data-2:9.1.159
  vim-enhanced-2:9.1.1591-1.amzn2023.0.1.x86_64                                                  vim-filesystem-2:9
  vim-minimal-2:9.1.1591-1.amzn2023.0.1.x86_64                                                   xfsprogs-6.12.0-3.
  xxd-2:9.1.1591-1.amzn2023.0.1.x86_64
Installed:
  apr-util-lmdb-1.6.3-1.amzn2023.0.2.x86_64                gcc-plugin-annobin-11.5.0-5.amzn2023.0.5.x86_64
  kernel-devel-1:6.1.159-182.297.amzn2023.x86_64           libdav1d-1.5.1-51.amzn2023.x86_64
  libheif-1.19.8-1.amzn2023.0.3.x86_64                     openh264-2.6.0-2.amzn2023.x86_64
  svt-av1-libs-2.3.0-47.amzn2023.x86_64                    x265-libs-4.1-2.amzn2023.x86_64
Removed:
  kernel-devel-6.1.129-138.220.amzn2023.x86_64

Complete!
#
成功したので、スワップを削除します 停止
swapoff /swapfile
永続設定を削除(有効化した場合)
sed -i '\|/swapfile|d' /etc/fstab
ファイル削除
rm -f /swapfile

ということで、スペックの低いサーバーでもメモリ不足を解決して作業する方法の紹介でした。