AlmaLinux9に移行して、mysqlサーバのバージョンを上げて、myISAMからinnoDBに変えたところ、mysqldがOut of memoryでOOM Killerにkillされる現象が頻発してきました。前述の通り、色々変えているので、きっかけは不明のままです。本現象が発生した後は、サーバ自体が不安定となり、最終的には強制再起動となるので、mysqlではない別の部分に真因がある可能性も低くありません。
# less /var/log/message May 15 05:36:11 omoshiro-joho kernel: Out of memory: Killed process 138863 (mysqld) total-vm:1789480kB, anon-rss:408140kB, file-rss:0kB, shmem-rss:0kB, UID:27 pgtables:1200kB oom_score_adj:0
# free -m total used free shared buff/cache available Mem: 956 816 74 34 235 139 Swap: 0 0 0
mysql> show global variables where variable_name like 'innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | innodb_page_size | 16384 | +------------------+-------+ 1 row in set (0.02 sec)
mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G;" | less ---------------------- BUFFER POOL AND MEMORY ---------------------- Total large memory allocated 0 Dictionary memory allocated 500256 Buffer pool size 8192 Free buffers 7133 Database pages 1054
Buffer poolの容量は、8192 * 16KB = 128MiB となる。
# emacs /etc/my.cnf.d/mysql-server.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysql/mysqld.log pid-file=/run/mysqld/mysqld.pid innodb_buffer_pool_size=64M
システムのメモリに対して十分に小さいので、mysqlは直接関係ない気もしますが、この変更で様子見をします。 ただ、mysqlのメモリ消費量は圧倒的に多いので、やはり怪しいのは、mysqlかな。
$ top top - 10:01:41 up 1:46, 1 user, load average: 0.00, 0.00, 0.00 Tasks: 99 total, 1 running, 98 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st MiB Mem : 956.4 total, 77.3 free, 799.0 used, 252.6 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 157.5 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2031 mysql 20 0 1711636 413464 16776 S 0.7 42.2 0:06.07 mysqld