Действительно ли производительность Grails 2.0 настолько ужасно низкая?

StackOverflow https://stackoverflow.com/questions/8840183

  •  27-10-2019
  •  | 
  •  

Вопрос

Я несколько новичок в ВЕБ-разработке на основе стека JVM, но будущему проекту потребуется именно какой-нибудь ВЕБ-движок на основе JVM.Поэтому я начал искать способы ускорить процесс и решил попробовать Grails.Из книги все выглядело хорошо, но меня впечатлило действительно долгое время запуска (grails run-app) Я решил проверить, как это работает под нагрузкой.Вот оно:

  • тестовое приложение:следуйте нескольким инструкциям здесь, чтобы сделать это с нуля (это займет 2 минуты при условии, что у вас уже установлены Grails и Tomcat).:

    _http://grails.org/Быстрый старт

  • тестовый пример (с Apache benchmark - поставляется с Apache httpd - _http://httpd.apache.org):

    ab.exe -n 500 -c _http://localhost:8080/мой проект/книга/создать
    (Примечание:это просто отображает 2 поля ввода внутри стилизованного контейнера)

  • аппаратное обеспечение:Intel i5 650 (4 ядра * 3,2 ГГц) 8 ГБ оперативной памяти и Win Server 2003 x64

Результат таков ..

Граали:32 Запроса в секунду

Total transferred:      1380500 bytes
HTML transferred:       1297500 bytes
Requests per second:    32.45 [#/sec] (mean)
Time per request:       308.129 [ms] (mean)
Time per request:       30.813 [ms] (mean, across all concurrent requests)
Transfer rate:          87.51 [Kbytes/sec] received

(Всего 32 запроса в секунду при 100% насыщенности процессора, это слишком ниже моих ожиданий для такого оборудования)

...Далее - я попытался сравнить его, например, с аналогичным фиктивным приложением JSF (я взял одно здесь:_http://www.ibm.com/developerworks/library/j-jsf2/ - ищите "Исходный код с файлами JAR", внутри есть \jsf-example2 arget\jsf-example2-1.0.war),

  • тестовый пример:ab.exe -n 500 -c 10 _http://localhost:8080/jsf/серверная часть/listing.jsp

Результат таков ..

JSF:400 Рекв/Сек

Total transferred:      5178234 bytes
HTML transferred:       5065734 bytes
Requests per second:    405.06 [#/sec] (mean)
Time per request:       24.688 [ms] (mean)
Time per request:       2.469 [ms] (mean, across all concurrent requests)
Transfer rate:          4096.65 [Kbytes/sec] received

...И, наконец, идет необработанный фиктивный JSP (просто для справки)

Jsp:8000 рекв/сек:

<html>
<body>
<% for( int i = 0; i < 100; i ++ ) { %>
Dummy Jsp <%= i %> </br>
<% } %>
</body>
</html> 

Результат:

Total transferred:      12365000 bytes
HTML transferred:       11120000 bytes
Requests per second:    7999.90 [#/sec] (mean)
Time per request:       1.250 [ms] (mean)
Time per request:       0.125 [ms] (mean, across all concurrent requests)
Transfer rate:          19320.07 [Kbytes/sec] received  

...

Я что-то упускаю? ...а приложение Grails может работать намного лучше?

PS:Я попытался профилировать свое запущенное приложение Grails с помощью VisualVM, но получил бесконечный цикл сообщений типа...

Profiler Agent: Redefining 100 classes at idx 0, out of total 413
...
Profiler Agent: Redefining 100 classes at idx 0, out of total 769
...

И, наконец, приложение просто перестало работать через несколько минут - так что, похоже, профилирование Grails - это не лучший выбор для хорошей диагностики.

Обновить - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Прежде всего, я должен обратиться к администратору, да, мне нужен RTFM - т.е."grails run-app" - неправильный способ запуска Grails для измерения производительности.После компиляции WAR и развертывания его в Tomcat производительность не то чтобы ужасно низкая - она просто низкая.Приведенные ниже показатели относятся к параллелизму 1 пользователя (я просто хотел проверить, какова МАКСИМАЛЬНАЯ производительность фреймворка в одном потоке и без большой нагрузки), и, читая другие связанные сообщения здесь, я пришел к "http://stackoverflow.com/questions/819684/jsf-and-spring-performance-vs-poor-jsp-performance " и решил проверить упомянутый там Apache Wicket - его производительность также включена.

Вариант использования таков:- ab.exe -n 500 -c 1 _http://локальный хост:8080/...- сервер - Tomcat7 в vFabric tcServer Dev edition с "insight", работающим в фоновом режиме

----------------------   tcServer       Plain Tomcat 7    -c 10
/Grails/book/create      77 req/sec     130 req/sec       410 req/sec
/jsf/backend/listing.jsp 133 req/sec    194 req/sec       395 req/sec
/wicket/library/         870 req/sec    1400 req/sec      5300 req/sec

Итак ...в любом случае, с Граалями что-то не так.Я выполнил некоторое профилирование с помощью tcServer (спасибо Karthick) - похоже, что он способен отслеживать только действия на основе Spring, а внутренняя трассировка стека для Grails выглядит следующим образом (для 2 запросов - примечание:показатели нестабильны - бьюсь об заклад, точность tcServer далека от совершенства, но может быть использована только для информирования)

Total (81ms)
    Filter: urlMapping (32ms)
        -> SimpleGrailsController#handleRequest (26ms)
        -> Render view "/book/create" (4ms)
    Render view "/layouts/main.gsp" (47ms)

Total (79ms)
    Filter: urlMapping (56ms) ->
        -> SimpleGrailsController#handleRequest (4ms)
        -> Render view "/book/create" (38ms)
    Render view "/layouts/main.gsp" (22ms)

PS:может случиться так, что основной причиной плохой производительности в Grails являются базовые библиотеки 'Spring', проверим это более подробно.

Это было полезно?

Решение

Вы запускаете его с помощью run-app?

http://grails.org/Deployment состояния:

"Grails никогда не следует развертывать с помощью команды grails run-app, поскольку это переводит Grails в режим "разработки", что влечет дополнительные накладные расходы."

Другие советы

попробуйте развернуть свой образец приложения в tomcat. grails run-app предназначен только для разработки.

в какой среде вы запустили приложение?подталкивать?дев?

используете ли вы строительные леса?

я пробовал это на своей машине (core i7-2600k).страница входа в систему с 4 полями ввода, динамическими макетами и некоторыми другими вещами.у меня 525 запросов в секунду в более медленной среде разработки.

Да, это ориентир для тех, кто мало что знает о граалях или своем окружении;во-первых, он работает в Windows, известной тем, что плохо разбирается в управлении ресурсами, именно поэтому большинство веб-сервисов / приложений работают в средах Linux.

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

Так что все это просто выглядит как сравнительный анализ плохой настройки и плохого понимания Grails.Я не хотел тебя обидеть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top