私はC++で書かれたサーバアプリケーションをCentOSにデプロイしています。私はコードの一部を書いていませんが、パフォーマンスを最適化する必要があります。現在のパフォーマンスは少数のユーザーには受け入れられますが、ユーザー数が増えるとサーバーのパフォーマンスが大幅に低下します。C++コードでパフォーマンスのボトルネックを見つける方法
ボトルネックを見つけるためのツール、テクニック、またはベストプラクティスはありますか?
私はC++で書かれたサーバアプリケーションをCentOSにデプロイしています。私はコードの一部を書いていませんが、パフォーマンスを最適化する必要があります。現在のパフォーマンスは少数のユーザーには受け入れられますが、ユーザー数が増えるとサーバーのパフォーマンスが大幅に低下します。C++コードでパフォーマンスのボトルネックを見つける方法
ボトルネックを見つけるためのツール、テクニック、またはベストプラクティスはありますか?
あなたは1
が続いて問題を再現得ることができるよう生産と同様にインフラを取り巻きます。それを済ませたら、プロファイラーなどを使用して、他の人が示唆しているようにします。私が好きな
+1パフォーマンスの問題を再現する方法に関する素晴らしいコメント。 –
、上記マイクDunlaveyの回答(そう景気改善彼のあなた景気改善鉱山であれば)私は二つの方法で急いで誰かのために詳しく説明したいと思います
:
gcc
ユーザーがそのサンプルを入手する簡単な方法SIGALRM
とbacktrace
を組み合わせたものイマー)。ほんの数日前、私は私のアプリのログはスタック(ない完璧なライン - と混在したように、私のsyslogのルーティングルールで行くPARAMSを使用して、この
# while true; do gstack $MYPID; sleep 2; done | logger $PARAMS
のような何かをしました)イベントとアップ
結果は、鼻の上にあった、彼らは私がすべての問題になると考えていた領域に私を指摘したが原因misuse of reference in a tr1::bind
に私のボトルネックでしたアラームの方法では、信号に何をするか注意してください。メモリを割り当てるものは使用しないでください(cout/cerr/boostはありません。 "%08X" with printf)
プロファイリングは素晴らしいですが、プロダクションシステムでの使用には明らかに適していません。まず、プロダクション以外のシステムで問題を再現する必要があります。 – MarkR
実際には、開発システムで問題を確認する必要はありません。代わりに、プロファイラーは、実行時間のかなりの部分が「長い」と認識していなくても費やされたと伝えるかもしれません。もちろん、アプリケーションをプロファイリングすることが役に立たない他の問題(例えば、データベース性能に関する問題)がある。 –