Нагрузочное тестирование

Перейти: Список форумов.Net FrameworkStimulsoft Reports.Web

Обсуждение Stimulsoft Reports.Web

Нагрузочное тестирование

Сообщение 04 авг 2017, 15:43

Мы периодически тестируем созданный нами продукт под нагрузкой.
Мы используем Stimulsoft Reports Web 2016.2.6.
Для построения отчетов мы используем StiMvcViewer, вот примерный код:
Код: Выделить всё
    @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,
            }
        , Server =
            {
                Controller = "StiView",
                RequestTimeout = Model.Timeout,
                UseRelativeUrls = true,
                PassQueryParametersForResources = false
            }
            ,
        Height = Unit.Percentage(100.0)
    })

Вот код обработчика:
Код: Выделить всё
        public ActionResult ViewerEvent()
        {
            return StiMvcViewer.ViewerEventResult(HttpContext);
        }

Ранее мы уже выкладывали свои результаты, см:
viewtopic.php?t=4192

Теперь мы усложнили условия тестирования, сейчас у нас 250 одновременно приходящих новых пользователей (кэш браузера чист) строят разные отчеты, их у нас штук 20.
И мы заметили, что запрос
[url]http://test-serv/StiView/ViewerEvent?mvcviewer_resource=scripts&mvcviewer_id=MvcViewer&mvcviewer_theme=Office2013&mvcviewer_loc=fi9WaWV3cy9TaGFyZWQvUmVwb3J0aW5nL0xvY2FsaXphdGlvbi9ydS54bWw%3d&mvcviewer_version=2016.2.6
[/url]
сильно тормозит сервер.
Мы провели дополнительные изыскания, и нам показалось, что надо результаты выполнения этого запроса кэшировать на сервере.
Выяснилось, что в версии с серверным кешированием отчеты работают быстрее примерно в 10 раз. Также примерно в 3 раза ускоряется работа пользователей с другими частями приложения. В тесте через отчеты проходит примерно 250 виртуальных абонентов из общего числа 1250. Кеширование в их браузерах включено, но изначально кеш пуст. Т.е. всего 250 запросов к скриптам стимулсофта многократно замедляют работу, причем не только отчетов, но и других страниц.

Мое предположение, что инъектирование в скрипт текстовых зависящих от локали ресурсов (параметр mvcviewer_loc) не кешируется у Вас и замедляет формирование скрипта. Возможно, имеет смысл ввести в Вашем коде (StiMvcViewer или ниже) по умолчанию кеширование сформированного JavaScript для каждой локали.

Также, при этих тестах мы неоднократно получали такую ошибку:
Код: Выделить всё
Type : System.NullReferenceException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Ссылка на объект не указывает на экземпляр объекта.
Source : Stimulsoft.Base
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : Void Add(System.String, System.String, System.String)
HResult : -2147467261
Stack Trace : в Stimulsoft.Base.Localization.StiLocalization.Add(String category, String key, String value)
в Stimulsoft.Base.Localization.StiLocalization.LoadInternal(Stream stream)
в Stimulsoft.Base.Localization.StiLocalization.LoadDefaultLocalization()
в Stimulsoft.Base.Localization.StiLocalization.Load(Stream stream)
в Stimulsoft.Base.Localization.StiLocalization.Load(String file)
в Stimulsoft.Report.Mvc.StiCollectionsHelper.GetLocalizationItems(String path)
в Stimulsoft.Report.Mvc.StiResourcesHelper.GetViewerCollections(String theme, String loc)
в Stimulsoft.Report.Mvc.StiResourcesHelper.GetViewerScripts(String id, String theme, String loc)
в Stimulsoft.Report.Mvc.StiResourcesHelper.Get(StiJavascriptParameters jsParams)
в Stimulsoft.Report.Mvc.StiMvcViewer.ViewerEventResult(HttpContextBase httpContext, StiReport report, Boolean detectActionResult)
в lambda_method(Closure , ControllerBase , Object[] )

У меня есть подозрения, что эти вещи связаны. Мне кажется, было бы хорошо, если бы была возможность "разогреть" библиотеки Stimulsoft при старте приложения, чтобы избежать данной ошибки, и заодно заполнить кэш, для ускорения работы приложения.

С уважением,
Дмитрий.
DmitryRu
 
Сообщения: 162
Зарегистрирован: 19 май 2014, 06:40

Re: Нагрузочное тестирование

Сообщение 08 авг 2017, 07:26

Здравствуйте,

Спасибо за предложение, очень хорошая идея, мы добавили её в список задач.

Спасибо.
Aleksey
 
Сообщения: 1520
Зарегистрирован: 22 апр 2010, 02:57

Re: Нагрузочное тестирование

Сообщение 08 авг 2017, 07:55

Здравствуйте
Алексей, а какие-то сроки по решению этой задачи можно назвать? В этом году или "когда уж совсем делать нечего будет"?
Что-то можете подсказать по приведенному StackTrace? Эту ошибку нам исправить уже сложно.

С уважением,
Дмитрий.
DmitryRu
 
Сообщения: 162
Зарегистрирован: 19 май 2014, 06:40

Re: Нагрузочное тестирование

Сообщение 08 авг 2017, 10:26

Здравствуйте,

В этом году, постараемся реализовать в сентябре до релиза 2017.2 версии. По поводу ошибки - она должна быть исправлена, в версии 2016.2 которую вы тестируете, была проблема с коллекцией локализационных значений, которая не лочилась и могли возникать ошибки из-за асинхронного доступа. В новой версии 2017.1 коллекция заменена на асинхронную.

Спасибо.
Aleksey
 
Сообщения: 1520
Зарегистрирован: 22 апр 2010, 02:57


Вернуться в Stimulsoft Reports.Web

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron