topコマンドはCPUアイドル時間を80%以上表示しますが、個々のプロセスがCPUを80%以上使用するのはなぜですか?

topコマンドはCPUアイドル時間を80%以上表示しますが、個々のプロセスがCPUを80%以上使用するのはなぜですか?

以下のスクリーンショットをご覧ください。強調表示された値は80%から95%の間にジャンプします。

ここに画像の説明を入力してください。

ご覧のとおり、postgresプロセスはCPUをすべて占有していますが、実際にはほとんどのCPUがアイドル状態と見なされます。マシンのCPUアイドル状態が最も高い。

ここで情報を収集しました。Linux "top"コマンド:us、sy、ni、id、wa、hi、si、st(CPU使用量)は何ですか?

そしてここ:https://scoutapm.com/blog/understanding-linuxs-cpu-stats

後者のソースは、データベースが「ユーザースペース」部分の一部であると具体的に言います。この不一致は他のCPUコアに関連していますか?

更新:

1コマンドを実行した後に押すと、topコアあたりのCPU使用率が表示されます。

ここに画像の説明を入力してください。

ご覧のとおり、CPUコアは18個あります。そのうちの1つはPostgresによって完全に消費されましたが、残りは空です。上部のコマンドにリストされている%CPUは、どのくらいのCP​​Uを使用しているかを示しています。シングルコア?私が見つけたソースではこれは明確ではありませんでした。

よりソリューション指向のアプローチをとると、より多くのコアを追加しても効果はありません。むしろ、postgresプロセスを実行するCPUのサイズを大きくすると、潜在的に使用するCPUの割合が低下する可能性がありますか?

答え1

ご覧のとおり、postgresプロセスはすべてのCPUを占めています。

いいえ、単一のCPUコアを占有します。これはUnix / Linuxでは100%を意味し、正確ではありません。

Postgresプロセスには、2つの異なるCPUコアの50%を占める2つのアクティブスレッドがあり、top/psは100%を報告します。

他のCPUコアに関連していますか?

はい。

ご覧のとおり、そのうちの1つはポストグレスによって完全に食べられましたが、残りは空です。

スクリーンショットには2つのCPUコアがあり、1つは88%、もう1つは9%です。その合計はposgresが使用するものと似ています。

コアを追加しても効果はありません。

ただし、特定の状況では、実行中のワークロードが何でもシングルスレッドCPUのパフォーマンスによって制限されるように見えるため、正解です。

むしろ、postgresプロセスを実行しているCPUのサイズを拡大すると、潜在的に使用するCPUの割合が低下する可能性がありますか?

どういう意味なのかよくわかりません。

関連情報