yum update で「メモリを確保できません」エラーの解決

技術

$ sudo yum update を実行したところ [Errno 5] [Errno 12] メモリを確保できません のエラーメッセージが表示されてアップロードできない現象の解消方法を説明します。

なお英語表示の場合は

[Errno 5] [Errno 12] Cannot allocate memory

となります。内容は同じで、とにかくメモリを確保しようとしたところ領域不足などの理由で確保できなかったという意味です。

エラーメッセージの一例を示します。一部抜粋。

Error downloading packages:
  php-xml-8.1.20-1.el7.remi.x86_64: [Errno 5] [Errno 12] メモリを確保できません
  1:nginx-1.20.1-10.el7.x86_64: [Errno 5] [Errno 12] メモリを確保できません
  sudo-1.8.23-10.el7_9.3.x86_64: [Errno 5] [Errno 12] メモリを確保できません
  kernel-tools-libs-3.10.0-1160.90.1.el7.x86_64: [Errno 5] [Errno 12] メモリを確保できません
  kpartx-0.4.9-136.el7_9.x86_64: [Errno 5] [Errno 12] メモリを確保できません
  php-mysqlnd-8.1.20-1.el7.remi.x86_64: [Errno 5] [Errno 12] メモリを確保できません
  MariaDB-devel-10.6.14-1.el7.centos.x86_64: [Errno 5] [Errno 12] メモリを確保できません
  1:grub2-pc-modules-2.02-0.87.0.2.el7.centos.11.noarch: [Errno 5] [Errno 12] メモリを確保できません
  nss-softokn-3.79.0-4.el7_9.x86_64: [Errno 5] [Errno 12] メモリを確保できません

このような感じでメモリが確保できないので、更新対象すべてのパッケージがことごとくアップデートエラーとなります。

現状把握(調査)

では、メモリ状態の概況からチェックしてみましょう。
free コマンドを実行します。

$ sudo free -mh
              total        used        free      shared  buff/cache   available
Mem:           481M        251M         90M         33M        138M        183M
Swap:            0B          0B          0B

このサーバは 481MB のメモリを積んでいて、そのうち 251MB が使用中、残容量は 90MB ということがわかりました。これは貧弱!厳しい環境です。

次にプロセス単位に使用中サイズを確認します。
$ sudo top を実行し、メモリ順にソートするために shift+m のキーを押します
すると下のように、上からメモリ消費が大きい順で実行中プロセスが表示されました。

top - 02:15:10 up 488 days, 14:27,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  97 total,   3 running,  94 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   492788 total,    92164 free,   257900 used,   142724 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   187268 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  885 root      20   0  197352  97104    636 S  0.0 19.7  14:47.54 dhclient
  983 mysql     20   0 1146732  63960     44 S  0.0 13.0 107:52.39 mariadbd
  956 root      20   0  574280  11812    524 S  0.0  2.4  67:56.99 tuned
19951 root      20   0  344752   6232    296 R  0.0  1.3  33:37.39 php-fpm
19953 nginx     20   0  344752   6112    176 S  0.0  1.2   0:00.00 php-fpm
19954 nginx     20   0  344752   6112    176 S  0.0  1.2   0:00.00 php-fpm
19955 nginx     20   0  344752   6112    176 S  0.0  1.2   0:00.00 php-fpm
19956 nginx     20   0  344752   6112    176 S  0.0  1.2   0:00.00 php-fpm
19957 nginx     20   0  344752   6112    176 S  0.0  1.2   0:00.00 php-fpm
15595 nginx     20   0   50604   4804   2808 S  0.3  1.0   3:30.31 nginx
25502 root      20   0  241464   4700   3540 S  0.0  1.0   0:00.00 sudo
25416 postfix   20   0   90548   4192   3104 S  0.0  0.9   0:00.00 pickup
  537 polkitd   20   0  612356   4132    568 S  0.0  0.8   3:04.35 polkitd
    1 root      20   0  191020   2844   1416 S  0.0  0.6  19:08.58 systemd
 1157 root      20   0  240976   2784   1156 S  0.0  0.6  36:14.01 rsyslogd
  809 root      20   0  102988   2608    544 S  0.0  0.5   0:21.30 dhclient
25503 root      20   0  162100   2272   1564 R  0.3  0.5   0:00.01 top
24880 centos    20   0  156844   1724    364 S  0.0  0.3   0:00.01 sshd
24878 root      20   0  156844   1588    244 S  0.0  0.3   0:00.01 sshd
  389 root      20   0   34964   1520   1212 S  0.0  0.3  10:00.53 systemd-journal
 1123 postfix   20   0   90724   1448    272 S  0.0  0.3   2:01.33 qmgr
24881 centos    20   0  115820   1432    920 S  0.0  0.3   0:00.02 bash
28813 root      20   0   13012   1364     84 S  0.0  0.3   0:11.31 config
 1116 root      20   0   90444   1308    184 S  0.0  0.3   1:30.99 master
 1164 root      20   0  112984   1276    244 S  0.0  0.3   0:00.07 sshd
15593 root      20   0   50396   1224      0 S  0.0  0.2   0:00.00 nginx
  541 dbus      20   0   58088   1168    640 S  0.0  0.2  16:23.49 dbus-daemon
  534 root      20   0   26468   1124    788 S  0.0  0.2   5:12.42 systemd-logind
 1173 root      20   0  126388    968    340 S  0.0  0.2   0:44.92 crond
  430 root      20   0   45608    960    208 S  0.0  0.2   0:00.05 systemd-udevd

対処

調査の結果、このサーバの場合、上位3位までを見ると
dhclient, mariadbd, php-fpm
で多くの消費をしている事が判明したので、yum update をするために一時停止しましょう。更新を終えたら再起動すれば良いです。

$ sudo systemctl stop mariadb.service
$ sudo systemctl stop php-fpm

dhclient の停止は面倒なので、とりあえず mariadbd, php-fpm を停止したところ下のように 121MB を確保できました。

$ sudo free -mh
              total        used        free      shared  buff/cache   available
Mem:           481M        178M        121M         33M        180M        255M
Swap:            0B          0B          0B

解決

それでは再度、アップグレードを試みます。

$ sudo yum update

無事、完了しました。
以上です。

タイトルとURLをコピーしました