Reports.Web при большой нагрузке

Обсуждение Stimulsoft Reports.WEB
Ответить
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Reports.Web при большой нагрузке

Сообщение DmitryRu »

Здравствуйте.
Мы тестируем разрабатываемое приложение на стендах с большим количеством пользователей-роботов.
После перехода на версию Reports.Web 2016.2.2 несколько раз получали в логах сервера такое:
Поток 1:

Код: Выделить всё

----------------------------------------
Время: 2016-10-26 06:13:53.219
Категория: Exceptions
Тип: Error
HandlingInstanceID: 1d6beee0-5e90-4726-b6cc-99206698871c
An exception of type 'System.NullReferenceException' occurred and was caught.
-----------------------------------------------------------------------------
Type : System.NullReferenceException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Object reference not set to an instance of an object.
Source : System
Help link : 
Data : System.Collections.ListDictionaryInternal
TargetSite : System.Object get_Current()
HResult : -2147467261
Stack Trace :    at System.Collections.Specialized.NameObjectCollectionBase.NameObjectKeysEnumerator.get_Current()
   at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()
   at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
   at System.Collections.Generic.HashSet`1.UnionWith(IEnumerable`1 other)
   at System.Collections.Generic.HashSet`1..ctor(IEnumerable`1 collection, IEqualityComparer`1 comparer)
   at System.Web.HttpValueCollection.EnableGranularValidation(ValidateStringCallback validationCallback)
   at System.Web.HttpRequest.ValidateHttpValueCollection(HttpValueCollection collection, RequestValidationSource requestCollection)
   at System.Web.HttpRequest.get_Headers()
   at System.Web.HttpRequestWrapper.get_Headers()
   at Stimulsoft.Report.Mvc.StiResourcesHelper.GetRequestUrl(HtmlHelper htmlHelper, String controller, Boolean relativeUrls, Boolean passQueryParams)
   at Stimulsoft.Report.Mvc.StiMvcViewer.CreateChildControls()
   at Stimulsoft.Report.Mvc.StiMvcViewer.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at Stimulsoft.Report.Mvc.StiMvcHelper.StiMvcViewer(String ID, StiMvcViewerOptions options)
   at ASP._Page_Views_Shared_Reporting_StiMvcViewer_cshtml.Execute() in c:\trunk\Web\Client\Views\Shared\Reporting\StiMvcViewer.cshtml:line 36
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.StartPage.RunPage()
   at System.Web.WebPages.StartPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
   at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

MachineName : CI-SERV5
AppDomainName : /LM/W3SVC/3/ROOT/nightly_trunk-1-131219171845922359
ThreadIdentity : rep_test@test-serv2.ru
WindowsIdentity : IIS APPPOOL\nightly_trunk
ИД Процесса: 5556
Имя Процесса: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Имя Потока: 
ИД Потока: 3780
Доп. информация:
	Request = Headers:
Connection:Keep-Alive;
Accept:text/html, application/xhtml+xml, */*;
Accept-Encoding:gzip, deflate;
Accept-Language:ru-RU;
Cookie:PdfSupport=2; SelectedRoleKey=1; 
Host:ci-serv5:8080;
User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0);
RequestType:GET
Url:/nightly_trunk/Report?id=1030
IPAddress:172.19.0.1
InputStream:
Из потока 2:

Код: Выделить всё

Время: 2016-10-26 06:13:53.219
Категория: Exceptions
Тип: Error
HandlingInstanceID: 17e8334e-d4d8-4c2c-81b1-090ee70344af
An exception of type 'System.ArgumentException' occurred and was caught.
------------------------------------------------------------------------
Type : System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Item has already been added. Key in dictionary: 'Accept'  Key being added: 'Accept'
Source : mscorlib
Help link : 
ParamName : 
Data : System.Collections.ListDictionaryInternal
TargetSite : Void Insert(System.Object, System.Object, Boolean)
HResult : -2147024809
Stack Trace :    at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
   at System.Collections.Hashtable.Add(Object key, Object value)
   at System.Collections.Specialized.NameObjectCollectionBase.BaseAdd(String name, Object value)
   at System.Collections.Specialized.NameObjectCollectionBase.BaseSet(String name, Object value)
   at System.Collections.Specialized.NameValueCollection.Set(String name, String value)
   at System.Web.HttpHeaderCollection.SynchronizeHeader(String name, String value)
   at System.Web.HttpRequest.FillInHeadersCollection()
   at System.Web.HttpRequest.EnsureHeaders()
   at System.Web.HttpRequest.get_Headers()
   at System.Web.HttpRequestWrapper.get_Headers()
   at Stimulsoft.Report.Mvc.StiResourcesHelper.GetRequestUrl(HtmlHelper htmlHelper, String controller, Boolean relativeUrls, Boolean passQueryParams)
   at Stimulsoft.Report.Mvc.StiMvcViewer.CreateChildControls()
   at Stimulsoft.Report.Mvc.StiMvcViewer.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at Stimulsoft.Report.Mvc.StiMvcHelper.StiMvcViewer(String ID, StiMvcViewerOptions options)
   at ASP._Page_Views_Shared_Reporting_StiMvcViewer_cshtml.Execute() in c:\trunk\Web\Client\Views\Shared\Reporting\StiMvcViewer.cshtml:line 36
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
   at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
   at System.Web.WebPages.StartPage.RunPage()
   at System.Web.WebPages.StartPage.ExecutePageHierarchy()
   at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
   at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
   at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
   at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
   at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

MachineName : CI-SERV5
AppDomainName : /LM/W3SVC/3/ROOT/nightly_trunk-1-131219171845922359
ThreadIdentity : rep_test@test-serv2.ru
WindowsIdentity : IIS APPPOOL\nightly_trunk
ИД Процесса: 5556
Имя Процесса: C:\Windows\SysWOW64\inetsrv\w3wp.exe
Имя Потока: 
ИД Потока: 4748
Доп. информация:
	Request = 
Мы используем компонент StiMvcViewer.
Искомый отчет отлично строится в однопоточном режиме, когда его запрашивает один пользователь.
А проблема возникла при одновременно запросе отчета из нескольких браузеров.
Потому подозреваю, что есть некий Race Condition в библиотеках Stimulsoft при обращении к HttpHeaders.

Reports.Web 2016.2.2

С уважением,
Дмитрий.
Aleksey
Сообщения: 2775
Зарегистрирован: 22 апр 2010, 06:57

Re: Reports.Web при большой нагрузке

Сообщение Aleksey »

Здравствуйте Дмитрий,

Уточните пожалуйста, а с какой версии вы обновились и работало ли на этой версии, при таком же сценарии?

Спасибо.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Reports.Web при большой нагрузке

Сообщение DmitryRu »

Обновились с версии 2016.1.ххх
Прошлый дистрибутив имел имя, насколько помню, SW_2016.06.09.zip - июнь месяц.
Если надо точнее, я могу развернуть старую версию приложения и в ней посмотреть, но это потребует некоторых моих усилий.

Ранее такая ошибка не замечалась, впрочем, она уже 2 ночи не воспроизводится. Она проявлялась 2 раза, в процессе двух ночных тестирований, как раз пока один из тестирующих роботов был неисправен :-) Т.е. нагрузка еще и меньше штатной была.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Reports.Web при большой нагрузке

Сообщение DmitryRu »

Сегодня обнаружил в логах одно исключение:

Код: Выделить всё

Время: 2016-10-28 06:12:14.639
Категория: Exceptions
Тип: Error
HandlingInstanceID: bb5e4802-c52e-4b76-aacc-5b0677bb37f4
An exception of type 'System.ArgumentException' occurred and was caught.
------------------------------------------------------------------------
Type : System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Item has already been added. Key in dictionary: '~/Views/Shared/Reporting/Localization/ru.xml'  Key being added: '~/Views/Shared/Reporting/Localization/ru.xml'
Source : mscorlib
Help link : 
ParamName : 
Data : System.Collections.ListDictionaryInternal
TargetSite : Void Insert(System.Object, System.Object, Boolean)
HResult : -2147024809
Stack Trace :    at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
   at System.Collections.Hashtable.Add(Object key, Object value)
   at Stimulsoft.Report.Mvc.StiCollectionsHelper.GetLocalizationItems(String path)
   at Stimulsoft.Report.Mvc.StiResourcesHelper.GetViewerCollections(String theme, String loc)
   at Stimulsoft.Report.Mvc.StiResourcesHelper.GetViewerScripts(String id, String theme, String loc)
   at Stimulsoft.Report.Mvc.StiResourcesHelper.Get(StiJavascriptParameters jsParams)
   at Stimulsoft.Report.Mvc.StiMvcViewer.ViewerEventResult(HttpContextBase httpContext, StiReport report, Boolean detectActionResult)
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
   at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Доп. информация:
	Request = RequestType:GET
Url:/nightly_trunk/StiView/ViewerEvent?mvcviewer_resource=scripts&mvcviewer_id=MvcViewer&mvcviewer_theme=Office2013&mvcviewer_loc=fi9WaWV3cy9TaGFyZWQvUmVwb3J0aW5nL0xvY2FsaXphdGlvbi9ydS54bWw%3d&mvcviewer_version=2016.2.2
IPAddress:172.19.хх.хх
Это вроде не Race Condition, но исключение чем-то похоже на предыдущее....

W BR,
Dmitry
Aleksey
Сообщения: 2775
Зарегистрирован: 22 апр 2010, 06:57

Re: Reports.Web при большой нагрузке

Сообщение Aleksey »

Здравствуйте Дмитрий,

Мы посмотрели логи доработок - были доработки в плане определения правильного URL адреса при использовании абсолютных ссылок. Мы сделали некоторые доработки, возможно это исключит появление данной ошибки. Так же, вы можете использовать относительные ссылки
UseRelativeUrls = true

По поводу локализации, в данном месте использовалась хэштаблица. Теперь используется thread-safe коллекция, ошибка не должна больше воспроизводиться.

Обновление будет доступно в следующем пререлиз билде.

Спасибо.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Reports.Web при большой нагрузке

Сообщение DmitryRu »

Спасибо.

Вот так я использую StiMvcViewr

Код: Выделить всё

    @Html.Stimulsoft().StiMvcViewer(
            viewerName,
        new StiMvcViewerOptions
    {
        Actions =
       {
           GetReportSnapshot = "GetReportSnapshot",
           ViewerEvent = "ViewerEvent",
           ExportReport = "ExportReport"
       }
       , Appearance =
        {
            ScrollbarsMode = true,
            ShowTooltips = false
        }
        , Localization = "~/Views/Shared/Reporting/Localization/ru.xml"
        , Toolbar =
            {
                ShowDesignButton = false,
                ShowParametersButton = false,
            }
        , Server =
            {
                Controller = "StiView",
                RequestTimeout = Model.Timeout,
                UseRelativeUrls = true,
                PassQueryParametersForResources = false
            }
            ,
        Height = Unit.Percentage(100.0)
    })
Т.е. у меня уже UseRelativeUrls = true
Aleksey
Сообщения: 2775
Зарегистрирован: 22 апр 2010, 06:57

Re: Reports.Web при большой нагрузке

Сообщение Aleksey »

Здравствуйте Дмитрий,

В данном случае, с указанной версии не было никаких существенных изменений. Пожалуйста, уточните - проявлялась ли эта ошибка снова?

Спасибо.
DmitryRu
Сообщения: 163
Зарегистрирован: 19 май 2014, 10:40

Re: Reports.Web при большой нагрузке

Сообщение DmitryRu »

Здравствуйте
Более не проявлялась, если проявится, сообщу.

Спасибо за помощь,
Дмитрий
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Reports.Web при большой нагрузке

Сообщение HighAley »

Здравсвуйте, Дмитрий.

Хорошо. Обязательно напишите, если ещё будет эта ошибка.

Спасибо.
Ответить