Xtr*_*der 15 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
Run Code Online (Sandbox Code Playgroud)
(只有32 Req/Sec,CPU饱和度为100%,这远低于我对这类硬件的预期)
...接下来 - 我试图比较它与类似的虚拟JSF应用程序(我在这里拿了一个:_http://www.ibm.com/developerworks/library/j-jsf2/ - 寻找"带有JAR文件的源代码",里面有\ jsf-example2\target\jsf-example2-1.0.war),
结果是......
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
Run Code Online (Sandbox Code Playgroud)
...最后是原始的虚拟JSP(仅供参考)
Jsp:8000 req/sec:
<html>
<body>
<% for( int i = 0; i < 100; i ++ ) { %>
Dummy Jsp <%= i %> </br>
<% } %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
...
我错过了什么吗?...和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
...
Run Code Online (Sandbox Code Playgroud)
最后应用程序在几分钟后停止工作 - 所以,看起来像分析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开发版中的Tomcat7,后台运行'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
Run Code Online (Sandbox Code Playgroud)
所以...无论如何,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)
Run Code Online (Sandbox Code Playgroud)
PS:可能会发生Grails中性能不佳的根本原因是"Spring"库,将更详细地检查这一点.
Ste*_*ert 15
你用run-app运行它吗?
http://grails.org/Deployment声明:
"不应该使用grails run-app命令部署Grails,因为这会将Grails设置为"开发"模式,这会带来额外的开销."
归档时间: |
|
查看次数: |
8504 次 |
最近记录: |