人々が信頼できると考えている2つのソースの見かけに矛盾するデータがあります。おそらく、ソースの1つを誤って読んだのでしょう。
サーバー環境はUbuntu 14.04.2 LTS、3.13.0-53-genericです。
一方では、CPU使用率をサンプリングしてGrafanaがレンダリングしたInfluxDBに入れるPythonスクリプトがあります。使用されるコマンドは次のとおりです。
ps -eLo pid,lwp,pcpu | grep 2924 | awk {'print $2,$3'}
...
2924 2924 0.1
2924 2926 2.4
2924 2927 2.4
2924 2930 2.4
2924 2933 2.4
2924 2935 0.0
2924 3096 0.0
2924 3099 9.0
2924 3100 5.7
CPU使用率は45秒ごとにサンプリングされますが、ほとんどの場合、グラフは期待どおりに報告されます。
このグラフによると、Foo()
作成時に呼び出されたスレッドは、上記のすべてのスレッドの中でCPU使用率が最も高くなります。実際、上記の実際の出力のTID 3099は問題のスレッドです。これらの高い使用量は、データのロードなどによって一日中続くことがあります。
一方、OProfileファミリがあります。私はoperf -gl
昨日このプログラムを数時間実行し、その代価として健康なデータの塊を受け取りました。レンダリングを使用すると、opreport -gc
次の行が表示されます。
46423 0.2396 FooManager.cpp:625 foobinary.V0.28 Foo()
これはインデントされていない行ですFoo()
。これに対する私の解釈は次のとおりです。Foo()
常に他のスレッドよりもCPU使用率が高くなります。ただし、分析の結果、キャプチャされたサンプルの 0.2396% だけが呼び出しスタックの機能を示しました。
これは不可能に見えます。確かに、CPU使用率が最も高いスレッドは、同僚と比較してプロファイルサンプルで最大の割合を占めますか?