对于基于JVM堆栈的WEB开发,我有点新手,但未来的项目将特别需要一些基于JVM的WEB引擎。所以我开始在一些地方寻找,以便迅速做出决定并转向试用Grails。本书看起来很不错,但是启动时间很长(grails run-app)让我留下了深刻的印象,我决定测试它是如何在负载下工作的。那就是:Grails 2.0的性能真的很低吗?
测试程序:遵循几个指令这里从地面使(需要2分钟,假设你已经有了Grails和Tomcat安装):
_http://grails.org/Quick +开始
测试用例(与Apache基准 - 自带的Apache的httpd - _http://httpd.apache.org):
ab.exe -n 500 -c _http://本地主机:8080/my-project/book/create
(注意:这只是风格的容器内显示2个输入字段)硬件:英特尔I5 650(4Core * 3.2GHz的)8GB拉姆&赢服务器2003的x64
结果是..
的Grails: 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请求/秒与CPU饱和度的100%,这是一个太下面我EXPE这样的硬件)
...接下来 - 我试图比较它与例如类似的虚拟JSF应用程序(我拿了一个在这里:_http://www.ibm.com/developerworks/library/j-jsf2/ - 寻找 “与JAR文件的源代码”,有\ JSF的例题\目标\ JSF-example2-1.0.war内),
- 测试用例:ab.exe -n 500 -c 10 _http: //localhost:8080/jsf/backend/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:我试着用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
...
最后APP刚停下几个分钟后,工作 - 所以,貌似剖析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://本地主机:8080/... - 服务器Tomcat7中的vFabric的tcServer开发版与 '洞察力' 的背景
运行---------------------- 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的远远beeing完美,但可以inforamtion只是使用)
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中的根本原因糟糕的表现是根本“春天”库,将在更多的细节检查。
因为您知道您的Grails基准很糟糕,所以我会编辑您的第一篇文章。 – Xorlev 2012-01-12 19:58:04