我在實體伺服器上新安裝了一台redhat 7.4,並且只在其上運行oracle資料庫12 C。我發現有超過200個進程是“kworker”,進程的數量還在增加。
我想知道這個過程是關於什麼的以及為什麼我的伺服器不斷地分叉這個過程?它應該是一個核心進程,但它似乎消耗了大量的進程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
該 kworker 正在處理 ACPI 事件。您可以看出這一點,因為它位於其「處理」函數 中,process_one_work
最終導致與處理 ACPI 事件相關的函數(如acpi_os_execute_deferred
)。
您可能會發現許多人都有這個堆疊或類似的東西:
[<ffffffff9409a37d>] worker_thread+0xbd/0x400
[<ffffffff940a0355>] kthread+0x125/0x140
[<ffffffff946780c5>] ret_from_fork+0x25/0x30
[<ffffffffffffffff>] 0xffffffffffffffff
這些內核工作人員只是坐著等待工作完成。
根據您的系統配置,擁有許多 kworkers 很可能是正常的。除非他們主動製造問題,否則我不會擔心他們。