📚
プロセスの優先度変更後、プロセスIDが変わることについて
環境
- Ubuntu22.04 (環境内にMariaDB(MySQL)をインストールしている)
概要
普段、運用しているコーポレートサイト(Linux)でMariaDB(MySQL)のプロセスが落ちて、サイトへの正常アクセスができていない事象が発生したことがありました。
メモリ使用率が10%台から60%台に跳ね上がって、MariaDB(MySQL)がOOM (Out of Memory) Killerによって強制終了されたことでした。
$ service mysql status × mariadb.service - MariaDB 10.6.18 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor prese>
Active: failed (Result: oom-kill) since Mon 2024-09-09 10:49:19 JST; 1h 51>
Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/
Process: <プロセスID> ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUST>
Main PID: <プロセスID> (code=killed, signal=KILL)
Status: "Taking your SQL requests now..."
CPU: 54min 21.148
対処法とプロセスIDが変わることについて
- まずは再起動しましょう。再起動すれば、元通りにサイトが表示されます。
systemctl restart mariadb
- 対策としては、MariaDB(MySQL)のプロセスIDの優先度を変更することでOOM (Out of Memory) Killerが稼働しないようにすることです。まずはMySQLのプロセスIDを確認しましょう。
ps -ef | grep mysql
- MariaDB(MySQL)のプロセスIDの優先度が0であることを確認します。"0"が表示されれば、大丈夫です。
cat /proc/<プロセスID>/oom_score_adj
- MariaDB(MySQL)のプロセスIDの優先度を-1000 にしてOOM Killerの対象から外します。
echo -1000 > /proc/<プロセスID>/oom_score_adj
- 下記のコマンドを実施し、何も表示されないことを確認する。MariaDB(MySQL)もOOM (Out of Memory)の数値である"-1000"を設定していきます。
cat /usr/lib/systemd/system/mariadb.service | grep "OOMScoreAdjust=-1000"
- 編集コマンドを実行する。
vi /usr/lib/systemd/system/mariadb.service
- 下記を追記し、保存する。
OOMScoreAdjust=-1000
- 設定の再読み込みを実施する。
systemctl daemon-reload
- MariaDB(MySQL)の再起動前にMariaDB(MySQL)の状態を確認する。
systemctl status mariadb
- MariaDB(MySQL)を再起動する。
systemctl restart mariadb
- MariaDB(MySQL)の状態を確認する。
systemctl status mariadb
- 再起動後、MySQLのプロセスIDが変わっていることがあるので、確認しましょう。
ps -ef | grep mysql
- MariaDB(MySQL)のプロセスIDの優先度が-1000であることを確認しましょう。
cat /proc/<プロセスID>/oom_score_adj
- 最後に接続確認をして、問題なければ大丈夫です。
結論
基本的にOOM (Out of Memory)の数値を"-1000"に設定すれば、OOM (Out of Memory) Killerが稼働し、プロセスが落ちることは無くなります。また、設定変更後、プロセスIDが変わっていることがあるので注意しましょう。
Discussion