對於基於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