Linux は「kworker」をフォークし続ける

Linux は「kworker」をフォークし続ける

物理サーバーに RedHat 7.4 を新しくインストールしましたが、Oracle Database 12 C のみが稼働しています。「kworker」には 200 を超えるプロセスがあり、プロセス数は増え続けています。

このプロセスが何であるか、またサーバーがこのプロセスを継続的にフォークしている理由を知りたいです。これはカーネル プロセスであるはずですが、プロセス ID と CPU 負荷を大量に消費しているようです。

ありがとう。

答え1

kworkerプロセスはカーネル ワーカー プロセスであり、多数存在しても無害である可能性が高いです。

カーネル ワーカー スレッドは、いくつかのランダムな例として、さまざまな処理を実行することができます。

  • ページキャッシュの書き戻しを行う
  • 特定の種類のハードウェアイベントの処理
  • 他にもいろいろ

kworker が何をしているかを知るには、 を参照してください/proc/<kworker_pid>/stack。例:

$ cat /proc/$(pgrep -of kworker)/stack
[<ffffffff85c0c705>] acpi_ns_evaluate+0x1bc/0x23a
[<ffffffff85bffe09>] acpi_ev_asynch_execute_gpe_method+0x98/0xff
[<ffffffff85be4e30>] acpi_os_execute_deferred+0x10/0x20
[<ffffffff8588dc21>] process_one_work+0x181/0x370
[<ffffffff8588de5d>] worker_thread+0x4d/0x3a0
[<ffffffff85893f1c>] kthread+0xfc/0x130
[<ffffffff8588de10>] process_one_work+0x370/0x370
[<ffffffff85893e20>] kthread_create_on_node+0x70/0x70
[<ffffffff858791ba>] do_group_exit+0x3a/0xa0
[<ffffffff85e6a2b5>] ret_from_fork+0x25/0x30
[<ffffffffffffffff>] 0xffffffffffffffff

process_one_workこの kworker は ACPI イベントに基づいて動作します。これは、kworker が「処理」関数 の内部にあり、最終的に ACPI イベントの処理に関連する関数 ( など) につながることからわかりますacpi_os_execute_deferred

おそらく多くの人がこのスタック、または同様のスタックを持っていることに気づくでしょう:

[<ffffffff9409a37d>] worker_thread+0xbd/0x400
[<ffffffff940a0355>] kthread+0x125/0x140
[<ffffffff946780c5>] ret_from_fork+0x25/0x30
[<ffffffffffffffff>] 0xffffffffffffffff

これらのカーネル ワーカーは、単に待機して作業の実行を待機しているだけです。

システム構成によっては、多数の kworker が存在するのが普通である場合もあります。それらが実際に問題を引き起こしていない限り、心配する必要はありません。

関連情報