5

サーバー アプリケーションで発生したメモリ アクセス違反を検出するには、Valgrind を使用する必要があります。サーバーは多くのスレッドを作成します。サーバーが 1 時間ごとにクラッシュする競合状態が発生していると思われます。Valgrind を使用してメモリ使用量を分析しましたが、サーバー プロセスの速度は劇的に低下しました。サーバーの速度が大幅に低下したため、ほとんど使用できず、おそらくレース状態もありませんでした.

アプリケーションと並行して Valgrind を実行して、それほどパフォーマンスを落とさないようにする方法はありますか?

4

4 に答える 4

10

そんなことはできません。Valgrind は実際にコードをネイティブに実行するのではなく、シミュレーター内で実行します。それがとても遅い理由です。したがって、Valgrind の利点を生かしながら、より高速に実行する方法はありません。

最善の策はulimit、プログラムがクラッシュしたときにコア ファイルを生成するように を設定することです。次に、コアを調べて問題の原因を突き止めます。

于 2009-09-27T14:09:53.273 に答える
6

Valgrindは、マルチスレッドプログラムをサポートしていますが、複数のコアが使用可能な場合、実際にはプログラムのスレッドを並列に実行しないことに注意してください。また、ネイティブOSスケジューラよりも細かい粒度でスレッドをインターリーブします。これらの2つの事実を組み合わせると、競合状態やその他の同時異常を伴うプログラムの動作が異なる可能性があります。

主に正しいロックの規律を検出することを目的としたツールであるHelgrindと、データの競合を検出することを主に目的としたツールであるdrdを試してみることをお勧めします。

于 2009-10-01T12:48:31.293 に答える
1

これはあなたの質問に直接答えているわけではありませんが、同期エラーが疑われる場合は、Valgrind ツールHelgrindを使用してみましたか?

于 2009-09-27T13:36:02.177 に答える
0

Valgrindはmalloc呼び出しにフックすることで機能するため、valgrindではプログラムの実行速度が低下することが予想されます。したがって、valgrindの下でプログラムをより高速に実行し、メモリエラーを分析する利点を得ることができなかったと言えます。

于 2010-02-23T01:46:31.073 に答える