Страница 1 из 1

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

Добавлено: 04 авг 2017, 18:43
DmitryRu
Мы периодически тестируем созданный нами продукт под нагрузкой.
Мы используем 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.
И мы заметили, что запрос
http://test-serv/StiView/ViewerEvent?mv ... =2016.2.6
сильно тормозит сервер.
Мы провели дополнительные изыскания, и нам показалось, что надо результаты выполнения этого запроса кэшировать на сервере.
Выяснилось, что в версии с серверным кешированием отчеты работают быстрее примерно в 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 при старте приложения, чтобы избежать данной ошибки, и заодно заполнить кэш, для ускорения работы приложения.

С уважением,
Дмитрий.

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

Добавлено: 08 авг 2017, 10:26
Aleksey
Здравствуйте,

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

Спасибо.

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

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

С уважением,
Дмитрий.

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

Добавлено: 08 авг 2017, 13:26
Aleksey
Здравствуйте,

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

Спасибо.

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

Добавлено: 04 окт 2017, 11:08
DmitryRu
Здравствуйте.
Вышла версия 2017.2
Подскажите, по вопросу о кэшировании скриптов Stimulsoft на стороне сервера что-нибудь сделано?

С уважением,
Дмитрий.

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

Добавлено: 04 окт 2017, 18:24
HighAley
Здравствуйте, Дмитрий.

Извините, но пока мы не сделали эту доработку.
Она требует больше времени.

Спасибо.

Ticket reference: 4847

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

Добавлено: 10 окт 2017, 17:13
Aleksey
Здравствуйте,

Сделали доработки, будет доступно в версии 2013.2.3
Опция будет называться UseCacheForResources в разделе Server для StiWebViewer, StiWebDesigner, StiMvcViewer, StiMvcDesigner компонентов.
По умолчанию включено.

Спасибо.