2013-05-29 67 views
1

我們在Windows 2008上承載ASP.NET MVC appIIS 7.5,3 cores CPU(all usage ~60%) and 2GB of RAM。 Web應用程序的w3wp.exe顯示~700,000K任務管理器中的內存使用情況。物理內存信息是Total 2043, Cached ~600, Available ~611, Free ~20ASP.NET MVC大量文件上傳丟失

網絡應用每分鐘接受大量的文件上傳。每分鐘約20個文件。文件大小範圍從100kb到10mb不等。我們已經注意到許多文件上傳被刪除。在查看HTTP請求信息時,我們發現Content-Length和TotalBytes值是不同的。

的另一maxRequestLength設置爲81920和executionTimeout 1200

<httpRuntime targetFramework="4.5" maxRequestLength="81920" executionTimeout="1200" /> 

Queue Length的應用程序池設置爲5000

我們不要在事件查看器中的任何錯誤,我們使用自定義文件粘結劑這樣

[HttpPost] 
public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> clientUpload, [OptionModelBinder]IOptionViewModel formData) 
{ 
//... 
} 

,並得到誤差在ASP.NET這樣

System.ArgumentNullException: Value cannot be null. 
Parameter name: name 
    at System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnError, Boolean ignoreCase) 
    at System.Reflection.Assembly.CreateInstance(String typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) 
    at PC.Controllers.OptionModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    at System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) 
    at System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) 
    at System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) 
    at System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag) 
    at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) 
    at System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) 
    at System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) 
    at System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) 
    at System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate endDelegate, Object tag) 
    at System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) 
    at System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) 
    at System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate endDelegate, Object tag) 
    at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

由於Content-Length和TotalBytes不匹配,自定義聯編程序接收請求但部分上傳數據。

也許有人知道問題出在哪裏以及從哪裏開始尋找?

+0

eventviewer中的任何錯誤???什麼是應用程序池的隊列長度?應用程序池/請求的超時和時間限制? –

+0

添加更多信息。 – Tomas

回答

0

您已設置maxRequestLength =「81920」,即80 mb。你已經提到大的請求可能跨越到100 MB,Content-Length和TotalBytes也是不同的。請檢查是否只有這些請求未能超過尺寸限制。如果是這樣,請增加maxRequestLength。

+0

maxRequestLength設置爲80mb,但失敗的文件比300kb或2mb小得多。失敗的許多請求不超過maxRequestLength。 – Tomas