2

Visual Studio からのメモリ ダンプで概説されている動作の種類を教えてください。w3wp ダンプ出力

正常です?たとえば、StackExchange.Redis.PhysicalConnection は包括的サイズ (バイト) でそれほど高く実行されますか? それとも本当に高いの?

基本的に、セッションから Azure Redis で実行するようにコードを変換した後、Web ヘッドで速度低下が発生しています (現在、必要に応じてシリアル化および逆シリアル化し、Redis キャッシュに格納しています) が、全体的なパフォーマンスはひどいものです。

リクエストは完了しますが、時間がかかる場合があります。これは、Redis のシングル スレッドの性質によるものですか? ここで概説されているように、Azure Redis チームによるベスト プラクティスとして概説されている構成を使用していますhttps://stackoverflow.com/a/28821220

現在のパフォーマンスは、現在使用しているセッション ベースの実装 (asp.net webforms/sql server/azure IaaS) の実行可能な代替品として受け入れられないため、パフォーマンスを向上させるために他に何ができるでしょうか。

PS - シリアライゼーションとデシリアライゼーションはヒットを引き起こします。IIS がシリアライズされていないデータセットなどのための独自の特別なメモリ プールで私たちを台無しにしたことは理解していますが、ページの読み込みが 300 ~ 500% 増加することはありません。今は私たちのためです。

考えていただければ幸いです!

@ティム・ウィーマン

キャッシュされたオブジェクトの大きさは? それらのサイズはさまざまで、redis に保存されているデータセットがいくつかあります。

それらはどのような種類のオブジェクトですか? ほとんどのオブジェクトは可変数のプロパティを持つカスタム オブジェクトであり、コレクションを含むものもあります。

どのシリアライザを使用していますか? Rowstate を必要としないものには Newtonsoft を使用し、rowstate を必要とするデータセットには必要なバイナリ シリアライザーを使用しています。

すべてのシリアル化とそれに続く逆シリアル化は、redis データベースの StringGet または StringSet を呼び出す前にコードで行われます。

4

1 に答える 1

1

メモリが実際に非常に高かったと思われる場合は、Redis キャッシュのシングルトン インスタンスではなく、誤って Redis への数千の接続を作成していました。

CPU が 98% に達し、サーバーが応答しなくなる前に、複数の接続が GC によってクリーンアップされませんでした。

Azure Redis への接続の 1 つのインスタンスがすべての Redis 呼び出しに使用されるようにコードを調整し、徹底的にテストしました。

Azure Redis がメモリまたは CPU リソースを消費しなくなったため、解決されたようです。

于 2016-03-15T21:15:26.217 に答える