2012-01-12 31 views
15

對於基於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中的根本原因糟糕的表現是根本「春天」庫,將在更多的細節檢查。

+1

因爲您知道您的Grails基準很糟糕,所以我會編輯您的第一篇文章。 – Xorlev 2012-01-12 19:58:04

回答

15

你用run-app運行它嗎?

http://grails.org/Deployment狀態:

發展「的Grails不應該使用Grails的運行程序命令,因爲這將Grails的了在部署‘中,環境什麼時候開始

+0

是的 - 我*是*運行它與'grails run-app',看到我的評論在這裏的另一個答覆。不過,我希望即使在Prod中也可以動態更新我的應用程序,並且它看起來像在Tomcat下更改* .gsp文件沒有任何影響。所以......選擇要麼運行'grails run-app',要麼有一個靜態站點:( – 2012-01-12 18:57:39

+17

我認爲如果你想在生產環境中動態更新你的代碼而不需要重新部署,那麼你應該找到另一個框架/平臺。Grails(和大多數基於JVM的框架)並不是真正爲此設計的。 – Gregg 2012-01-12 19:03:18

+8

@XtraCoder RTFM [6.2.7更改部署的應用程序](http://grails.org/doc/latest/guide/theWebLayer.html #makingChangesToADeployedApplication) – jamesallman 2012-01-12 20:03:56

4

嘗試將示例應用程序部署到tomcat。 grails run-app僅供開發。

+0

_Yep,Tomcat下的Grails給出的結果稍微接近JSF應用程序--390req/sec(儘管吞吐量降低了4倍)。還是......足夠好:)? - 相較於JSP我預計大約1000 REQ東西/序列是更適合這樣一個簡單的頁面_ – 2012-01-12 18:44:25

+0

並與剖析,在控制檯中的另一個消息,但同樣的結果仍然沒有運氣 ***剖析器引擎警告:目標VM無法將類加載到工具java_lang_Long $ getLong ***最近它可能已被卸載 – 2012-01-12 18:47:06

+0

您可以嘗試使用spring tcServer進行配置文件。這也可以作爲STS捆綁銷售 – 2012-01-12 22:15:10

2

’具有額外開銷模式。」應用程序?督促?開發?

你用腳手架嗎?

我試過了我的機器(核心i7-2600k)。一個包含4個輸入字段的登錄頁面,動態佈局和其他一些東西。我在慢速開發環境中每秒獲得525個請求。

+0

我不知道你是什麼意思開發或督促的意思。這是我的d ev工作站。腳手架? - 是的,據我瞭解。 – 2012-02-09 20:44:03

+1

你可以在不同的'環境'中啓動grails。只需運行'grails prod run-app'進行生產(更快)或'grails run-app'進行開發。腳手架很慢,不要在生產環境中使用它。簡單的說法:如果您使用它,每個請求的後臺都有很多代碼生成。 – thelittlebug 2012-02-11 22:47:42

2

是的,這是一個不瞭解Grails或他的環境的人的基準;首先,他在Windows上運行時知道資源管理不好,這就是爲什麼大多數Web服務/應用服務在Linux環境中運行的原因。其次,如果他使用'ab'進行基準測試,那麼他沒有他的代理緩存設置,因爲在第一次點擊後,其餘的點擊將被緩存,現在他正在對我的緩存進行基準測試瞭解他的設置。

所以這一切看起來像一個糟糕的設置和對Grails瞭解不夠的基準。沒有違法意圖。