web-dev-qa-db-ja.com

高いCPU使用率のトラブルシューティング

Ubuntu 14.04.4 LTSでSupermicroサーバーを実行しています。ユーザー空間にほとんど触れずに、sy cpu時間を最大化するアプリがあります。 Ubuntu 12.04.4 LTSを使用して古いハードウェアで同じアプリを実行すると、CPUはユーザーとシステムの間ではるかにバランスが取れています。プロセスに関するパフォーマンス情報を取得するためにstraceを使用しましたが、epoll_waitがシステムCPU時間の98%を占めていることがわかりました。私はこの電話について多くの情報を見つけることができません。誰かがこれに光を当てることができますか?

1
scott

「perf」を使用すると、CPUがどこで消費されているかをさらに詳細に確認できます。

Perfをインストールします。

Sudo apt-get install linux-tools-$(uname -r)

次に、すべてのCPUリソースを消費するプログラムを開始します

次に、perfを実行し、すべてのスケジューリングイベントを60秒間キャプチャします。

Sudo perf record -a sleep 60

それが完了すると、次を使用してすべてのパフォーマンスイベントのログを取得できます。

Sudo perf script > perf.log

そしてそれを見ることができます、またはもっと良いのは、以下を使用してCPUホットスポットをインタラクティブに見ることができます:

Sudo perf report
2
Colin Ian King

Epoll syscallをキャプチャするためだけに-e epoll_waitオプションを使用してプログラムのトレースから出力をキャプチャできる場合、それをこの質問に追加すると、何が起こっているのかがわかります。

Epoll_waitシステムコールは基本的にいくつかのepollイベントを待機しており、epoll_waitシステムコールのCPU消費が高い場合は、指定されたタイムアウトが小さすぎることを意味し、ループ内で何万ものepoll_waitコールが発生するか、実際、epoll_waitが待機しているコードが処理している多くのイベントが発生しています。または、プログラムのバグである可能性があり、何らかのエラーが発生している場合があります。典型的なエラー状態は、無効なパラメーターがシステムコールに渡されるEINVAL、または無効なファイル記述子が使用されているEBADF(おそらく失敗したオープンから)です。

そのため、プログラムを再度追跡します。

strace -f -e epoll_wait program-name >& strace.log

どんな種類のepoll_wait障害が発生しているかを確認します(-1の戻り値)。障害が発生していない場合は、タイムアウトが発生した(0)か、ファイル記述子がI/Oの準備ができた(return> 0)かを確認します。

0
Colin Ian King