mysqlのoom_killerの優先度を下げる

高負荷が発生したときに、oom_killerがMySQLを落とすことがよくあります。
そんなもの止めてしまえと思うかもしれませんが、
メモリが枯渇してShellログインできなくなるよりはましです。

cronから動作させる想定です。

oom_update.sh

#!/bin/sh

# down mysql score 
hostname=`hostname`
mysql_pid=`cat /var/lib/mysql/${hostname}.pid`

if [ "$mysql_pid" != "" ]; then
  echo "-17" > /proc/${mysql_pid}/oom_adj
else
  echo "can't get pid number"
fi

スコアの確認

display_oom.sh

#!/bin/bash

IFS=$'\n';
for dir in `find /proc -maxdepth 1 -type d`
do
if [ -f "$dir/cmdline" ] && [ "`cat $dir/cmdline`" != "" ] && [ -f "$dir/oom_score_adj" ]; then
  echo "`cat $dir/cmdline` : oom_adj=`cat $dir/oom_adj` -> oom_score=`cat $dir/oom_score`"
fi
done

./display_oom.sh | grep mysql