Grails 2.0的性能真的非常低吗?

时间:2012-01-12 18:19:11

标签: performance grails grails-2.0

我对基于JVM堆栈的WEB开发有点新手,但是未来的项目需要专门的一些基于JVM的WEB引擎。因此,我开始寻找一些可以快速制作的东西并转而尝试Grails。从书中看起来很不错,但真正长时间的启动时间给我留下了深刻印象(grails run-app)我决定在负载下测试它是如何工作的。这是:

  • 测试应用程序:按照此处的一些说明从地面开始(假设您已经安装了Grails和Tomcat,需要2分钟):

    _http://grails.org/Quick+Start

  • 测试用例(使用Apache基准测试 - 附带Apache httpd - _http://httpd.apache.org):

    ab.exe -n 500 -c _http:// localhost:8080 / my-project / book / create
    (注意:这只是在样式容器中显示2个输入字段)

  • 硬件:Intel i5 650(4Core * 3.2GHz)8GB Ram& Win Server 2003 x64

结果是..

Grails:32 Req / Sec

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 Req / Sec,100%的CPU饱和度,这远远低于我对这种硬件的预期)

...下一步 - 我试图比较它与类似的虚拟JSF应用程序(我在这里拿了一个:_http://www.ibm.com/developerworks/library/j-jsf2/-寻找“源代码与JAR文件“,里面有\ jsf-example2 \ target \ jsf-example2-1.0.war”,

  • 测试用例:ab.exe -n 500 -c 10 _http:// localhost:8080 / jsf / backend / listing.jsp

结果是..

JSF:400 Req / Sec

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 req / sec:

<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:我尝试使用VisualVM对我正在运行的Grails应用程序进行分析,但是得到了无穷无尽的消息循环,如...

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个用户的并发性(我只是想在一个线程中检查框架的MAX性能并且没有重负),在阅读其他相关帖子时,我来到了“http://stackoverflow.com/问题/ 819684 / jsf-and-spring-performance-vs-poor-jsp-performance“并决定检查那里提到的Apache Wicket - 它的性能也包括在内。

用例是: - ab.exe -n 500 -c 1 _http:// localhost:8080 / ... - 服务器是vFabric tcServer Dev版本中的Tomcat7,其背景是“洞察力”

----------------------   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

所以...无论如何,Grails有问题。我使用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”库的基础,会更详细地检查这一点。

4 个答案:

答案 0 :(得分:15)

您是否使用run-app运行它?

http://grails.org/Deployment州:

“不应该使用grails run-app命令部署Grails,因为这会将Grails设置为”开发“模式,这会产生额外的开销。”

答案 1 :(得分:4)

尝试将示例应用程序部署到tomcat。 grails run-app仅用于开发。

答案 2 :(得分:2)

你在哪个环境启动应用程序?督促? dev的?

你使用脚手架吗?

我在我的机器上尝试过它(核心i7-2600k)。一个包含4个输入字段,动态布局和其他一些内容的登录页面。在较慢的开发环境中,我每秒有525个请求。

答案 3 :(得分:2)

是的,这是一个不太了解grails或他的环境的人的基准;首先,他在Windows上运行时知道自己在资源管理方面表现不佳,这就是为什么大多数网络服务/应用服务都在Linux环境中运行。

其次,如果他使用'ab'进行基准测试,那么他没有设置代理缓存,因为在第一次点击之后,其余的点击将被缓存,他现在正在根据我的理解对他的缓存进行基准测试他的设置。

所以这一切看起来就像是糟糕设置的基准测试和对Grails的不了解。没有违法行为。