2012-02-02 73 views
6

私たちには、F5ロードバランスサーバで動作するASP.NET 4.0 MVC3アプリケーションがあります。ハッシュテーブルの挿入に失敗しました。負荷係数が高すぎます。 - asp.NET 4.0 MVC3

以下の例外があります。私たちのWebアプリケーションではマルチスレッドを実行しませんが、F5ロードバランシングサーバーがこの式に含まれているかどうかはわかりません。以前のバージョンの.NETで例外がどこで発生するのかを確認します(他のほとんどの記事は.NET 2.0と3.5を扱います)。誰も.NET 4.0でこの問題を経験しましたか?

例外は、ログイン時に例外が発生することなくページをロードできないため、アプリケーションを使用できなくしました。既にレビュー

他のリンク:

2012-02-02 06:01:42671 [26]致命的なシステム[(NULL )] - 未処理の の例外がXYZアプリケーションで発生しました。 System.InvalidOperationException:Hashtableの挿入に失敗しました。負荷係数 が高すぎます。最も一般的な原因は、複数スレッドが同時に ハッシュテーブルに書き込むことです。 System.Collections.Hashtable.Insert(オブジェクトキー、オブジェクトnvalue、ブール アドオン)でSystem.ComponentModel.TypeDescriptor.NodeFor(タイプtype、 ブールcreateDelegator)で System.ComponentModel.TypeDescriptor.GetProvider(タイプtype)でのSystem.Web.Mvc.ModelBinderDictionary.GetBinderで System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider..ctor(タイプ タイプ)(タイプ modelType、IModelBinder fallbackBinder) System.Web.Mvc.ControllerActionInvoker.GetModelBinderで(ParameterDescriptor parameterDescriptor)で System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext 、ControllerContext、ParameterDescriptorパラメーター System.Web.Mvc.ControllerでSystem.Web.Mvc.ControllerActionInvoker.GetParameterValues( System.Web.Mvc.ControllerActionInvoker.InvokeActionでControllerContext controllerContext、ActionDescriptor actionDescriptor)(ControllerContext controllerContext、ストリングactionNameの)でrDescriptor)。 ExecuteCore()で System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
で System.Web.Mvc.MvcHandler。 <> c__DisplayClass6。 <> c__DisplayClassb.b__5() at System.Web.Mvc.Async.AsyncResultWrapper。 <> c__DisplayClass1.b__0() at System.Web.Mvc.MvcHandler。 <> c__DisplayClasse.b__d() でSystem.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() System.Web.HttpApplication.ExecuteStep(IExecutionStepステップ、 ブール& completedSynchronously)

スタックトレースからわかるように、コード内の特定の場所を指しているわけではありません。デバッグは困難です。

この例外が発生しないようにするためのアドバイスは、大いにありがたいです。

+0

は、あなたがそれをロック解除後、あなたの行動を実行すると、ハッシュテーブルをロックしようとしたことがあり)4.5ベータ版で修正されてすることが報告されていますか?備考の最初の例:http://msdn.microsoft.com/en-us/library/system.collections.hashtable.synchronized.aspx –

+2

@ Splash-X:スタックトレース全体がフレームワークコード内にあります。 「ユーザーがページをロードすると、」 – SLaks

+0

それは、このエラーは、アプリケーションプールの起動やアプリケーションプールは一定の期間生きてきた後にそれが起こるん時からリクエストごとに起こるん –

答えて

0

このスレッドではキムの応答をチェックアウト:http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/172f4f77-601e-4b4f-8d98-582f8f62a98e


こんにちはマット、

.NET 2.0では、このエラーは、ほとんどの場合、同時にハッシュテーブルを変更する複数のスレッドによって引き起こされます。 Hashtableは複数のライタースレッドセーフではないので、修正はHashtableを変更する前にロックを挿入することです。もう一つの可能​​な解決策は、Hashtable.Synchronizedを介して同期化されたラッパーを使用することですが、前者を細かく制御することをお勧めします。

ハッシュテーブルを修正しているコードの場合は、これが修正です。あなたが提供した情報に基づいて、私はそうではないと思います。 ASP 2.0 Webサイトでこのバグが発生していると述べたので、これは下流のHashtable発信者が原因である可能性があります。たとえば、コールスタックが次のようになっている場合、これは最新のリリースで修正されたバグです。

おかげで、 キム

スタックトレース:System.Collections.Hashtable.set_Item(オブジェクトキー、オブジェクト値) でSystem.Collections.Hashtable.Insert(オブジェクトキー、オブジェクトnvalue、ブールアドオン) でSystem.ComponentModelでSystem.ComponentModel.TypeDescriptor.CheckDefaultProvider(タイプtype) System.ComponentModel.TypeDescriptor.NodeFor(タイプタイプ、ブールcreateDelegator)で System.ComponentModel.TypeDescriptor.GetDescriptor(タイプ種類、文字列型名)で で。 TypeDescriptor.GetAttributes(Type componentType) at System.Web.UI.ThemeableAttribute.IsTypeThemeab System.Web.UI.Control.ApplySkinの (ページページ)System.Web.UI.Control.InitRecursive(コントロールnamingContainer)の の (System.Web.UI.Control.InitRecursive) at System.Web.UI.Control.InitRecursive(コントロールのネーミングコンテナ) at System.Web.UI.Control.InitRecursive(コントロールのネーミングコンテナ) at System.Web.UI.Control.InitRecursive(コントロールのネーミングコンテナ) at System.Web .UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint、Boolean includeStagesAfterAsyncPoint)

6

これは一般的ではない問題ですが、多くの人(私が含まれています)で発生します。特定の負荷スレッショルドとリンクされているようには見えません。ただ単に「発生する」ことはありません。負荷に関係なく頻繁に発生します。
ソリューション:
一時:それは起こりませんIISをリセットし、あなたの指を渡り、再び
常設:マイクロソフトからパッチをKB articleで説明を取得または固定されようとしている。ネットの次のバージョンを待ちます(すでに

関連する問題