KUSONEKOの見る世界

kworker がCPU使用率33%で張り付く問題の対処

いつからか、CentOS 8のあるコアのCPU使用率が常時33%程度で張り付くようになっていました。

topコマンドで確認すると以下のようになっており、kworkerがずっと動いているようでした。

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    280 root      20   0       0      0      0 D  32.5   0.0   1392:24 kworker/2:2+events
   1017 mysql     20   0 6055096   1.0g  35932 S   6.0  13.4 131:42.13 mysqld

再起動しても直ることが無いため放置していましたが、対処法が分かったためメモしておきます。

※失敗すると起動しなくなる恐れがあるため、自己責任でお願いします

1. 原因と対処

以下URLで記載がありますが、i915ドライバのバグだそうです。https://bugs.centos.org/view.php?id=17482

対処方法として、このi915ドライバを使用しないようブラックリストに入れます。

ただし、i915はグラフィックドライバです。
私は、SSHでしかアクセスしないので問題はありませんが、GUIを使われる方はご注意ください。

2. 対処方法

CentOS 8 では、以下のようにすればブラックリスト化できるようです。
あまりよく分からずやっています。

# echo "blacklist i915" >> /etc/modprobe.d/local-blacklist.conf
# echo "install i915 /bin/false" >> /etc/modprobe.d/local-blacklist.conf

# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.$(date +%m-%d-%H%M%S).bak
# dracut --omit-drivers i915 -f

# grub2-editenv - list | grep kernelopts
kernelopts=root=UUID=********-****-****-****-************ ro crashkernel=auto resume=UUID=********-****-****-****-************ rhgb quiet 
# grub2-editenv - set kernelopts="上記赤字部分をここに書く i915.blacklist=1 rd.driver.blacklist=i915"

# cp /boot/initramfs-$(uname -r)kdump.img /boot/initramfs-$(uname -r)kdump.img.$(date +%m-%d-%H%M%SS).bak
# sed -i '/^KDUMP_COMMANDLINE_APPEND=/s/"$/ rd.driver.blacklist=i915"/' /etc/sysconfig/kdump
# kdumpctl restart
# mkdumprd -f /boot/initramfs-$(uname -r)kdump.img

# reboot

3. 対処後

対処後にtopで確認すると、kworkerが上位に来なくなったことが分かります。

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    993 mysql     20   0 6017248 791896  35700 S   7.3  10.1   0:15.21 mysqld
   1882 nginx     20   0  405320  32296  19808 S   1.0   0.4   0:00.20 php

ZabbixでもCPU使用率が下がったことが確認できました。