【CentOS8】systemdのCPU使用率が高騰し100%になる問題解決


CentOS8で構築したWebサイトが最近なぜか重く感じるようになりました。
アクセスしても表示されるのが著しく遅いので、サーバーを確認してみるとCPUが高騰し、100%近くで張り付いている状況でした。

今回の問題を解決したのでメモをしておきます。


「CentOS8」systemd+というユーザーがCPU使用率が高騰する問題を解決

事象は以下の状態となりますう。
topコマンドを実行した際、「syytemd+」というユーザーがCPU使用率をほとんど使用している状態となっています。

$ top

top - 21:06:50 up 63 days,  5:04,  1 user,  load average: 1.83, 1.84, 1.92
Tasks: 110 total,   1 running, 109 sleeping,   0 stopped,   0 zombie
%Cpu(s): 97.0 us,  2.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.7 hi,  0.3 si,  0.0 st
MiB Mem :    477.5 total,      5.4 free,    375.5 used,     96.6 buff/cache
MiB Swap:   2048.0 total,   1616.5 free,    431.5 used.     88.4 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 2622 systemd+  20   0  306068 264112      4 S  94.4  54.0  14568:36 ei74G1
30728 root      20   0  622060  13988      0 S   4.7   2.9 305:10.66 python
 5710 root      20   0   63336   4404   3632 R   0.3   0.9   0:00.01 top
    1 root      20   0   94340  10612   8188 S   0.0   2.2   4:39.94 systemd
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.95 kthreadd

上記で「systemd+」のCPU使用率が頭打ちしているので、以下の対応をしました。

暫定対応

一時的な対応として、systemctlのサービス再起動を実施しました。
このコマンドはサービスに影響がないということもあり、サービス影響に支障なく対応したい場合に使用します。

ちなみに、私のwebサーバーでは一時的に効果はありました。

$ systemctl daemon-reexec

恒久対応

恒久対応は、systemdをアップデートします。
いろいろと調べてみると、systemdのバグがあるようで、アップデートすることで改善されているようです。

以下で、「yum info」コマンドを実施した際の例となります。

$ yum info installed systemd
Failed to set locale, defaulting to C.UTF-8
Modular dependency problem:

 Problem: conflicting requests
  - nothing provides module(perl:5.26) needed by module perl-DBI:1.641:8010020191113222731:16b3ab4d-0.x86_64
Installed Packages
Name         : systemd
Version      : 239
Release      : 18.el8_1.5
Architecture : x86_64
Size         : 16 M
Source       : systemd-239-18.el8_1.5.src.rpm
Repository   : @System
From repo    : BaseOS
Summary      : System and Service Manager
URL          : http://www.freedesktop.org/wiki/Software/systemd
License      : LGPLv2+ and MIT and GPLv2+
Description  : systemd is a system and service manager that runs as PID 1 and starts
             : the rest of the system. It provides aggressive parallelization
             : capabilities, uses socket and D-Bus activation for starting services,
             : offers on-demand starting of daemons, keeps track of processes using
             : Linux control groups, maintains mount and automount points, and
             : implements an elaborate transactional dependency-based service control
             : logic. systemd supports SysV and LSB init scripts and works as a
             : replacement for sysvinit. Other parts of this package are a logging daemon,
             : utilities to control basic system configuration like the hostname,
             : date, locale, maintain a list of logged-in users, system accounts,
             : runtime directories and settings, and daemons to manage simple network
             : configuration, network time synchronization, log forwarding, and name
             : resolution.

systemdをアップデートできそうなので実施します。

$ yum update systemd

最後にOSの再起動もしておきます。

$ shutdown -r now

「systemd」アップデート後に事象改善

「systemd」アップデート後のCPU使用率ですが、以下の通り、CPUの頭打ちはなくなり、Webサーバーの動作も軽くなりました。

top - 00:23:05 up  2:49,  1 user,  load average: 0.08, 0.08, 0.02
Tasks: 122 total,   2 running, 120 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  1.3 sy,  0.0 ni, 97.2 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
MiB Mem :    821.3 total,     95.7 free,    288.2 used,    437.4 buff/cache
MiB Swap:   2048.0 total,   2039.2 free,      8.8 used.    385.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   5766 root      20   0  277312  43968  12704 S   5.0   5.2   9:00.15 python
   6550 root      20   0   67424   4952   4176 R   0.3   0.6   0:00.06 top
      1 root      20   0  176748  10776   8296 S   0.0   1.3   0:01.44 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par+
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker+
      8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_perc+

今回の件とは違いますが、以下参考URLを参考にしました。
https://yomon.hatenablog.com/entry/2017/03/23/103419

CentOS8でsystemdでCPUが頭打ちしている方は参考にしてください。

サーバーエンジニアへの構築手順書

2014年5月17日
イラスト図解式 この一冊で全部わかるサーバーの基本

イラスト図解式 この一冊で全部わかるサーバーの基本

きはし まさひろ
1,663円(08/03 22:28時点)
発売日: 2016/03/28
Amazonの情報を掲載しています


関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

ABOUTこの記事をかいた人

blank

インターネット関連のSEをやっています。 ネットワーク、サーバー、ストレージ、仮想基盤まで幅広く手を出しており、MVNOの構築経験もあります。 現在は、Pythonを使ったプログラミングの開発をしネットワークの自動化ツールを作成しています! Pythonの入門書も作成しているので、ぜひ参考にしてください!