2013年2月22日

從慘痛經驗比較 Grails 2 應用程式的佈署環境

每次以 Java 開發 Web Application,總是在效能的問題踢到鐵板。前幾年使用  Groovy 架構打造的 PLWeb,耗費近兩個學期的調校,最後才能負載約 100 多位 concurrent user 的處理量;伺服器的總記憶體甚至增加增加到 32GB,所以算用銀兩解決不少問題。

重新以 Grails 開發的 CodeCanaan 教學系統,面臨的伺服器環境更加嚴苛,因為沒有任何經費補助,只能勉強先租用一部 Linode 1024MB 的主機,也就是記憶體只有 1GB 的情況下,要運作一個框架更為複雜的 Web 系統。

機器:Linode VPS 1024 搭配 Ubuntu 12.04 LTS  Server。

RAM 的分配:
  • Tomcat 約 768MB
  • Apache、MySQL 與其餘系統服務 256MB

雖然理想是能有一部獨立的 Database Server 加上三部 Application Server,但現實是沒有那麼多銀兩,所以只能先將有限的資源榨乾。

本來對新版的 Java 7 + Tomcat 7 號稱更好的效能有一些幻想,所以就直接將 Server 的 Java EE 環境直接升級到最新。

今天第一次上線面對 70 位使用者同時上線,光是註冊動作就卡住近 20 分鐘,接下來不斷面臨網站癱瘓的局面。

平常開發階段的測試速度都很快,讓我對 Grails 專案佈署結果有過度期待,面對網站不堪用的情況,只好從基本的壓力測試重新檢查一次。

Oracle Java 7 + Tomcat 7 的測試結果。

$ ab -n 512 -c 20 http://localhost:8080/

Concurrency Level:      20
Time taken for tests:   109.402 seconds
Complete requests:      512
Failed requests:        0
Write errors:           0
Total transferred:      13357056 bytes
HTML transferred:       13202944 bytes
Requests per second:    4.68 [#/sec] (mean)
Time per request:       4273.526 [ms] (mean)
Time per request:       213.676 [ms] (mean, across all concurrent requests)
Transfer rate:          119.23 [Kbytes/sec] received

看到這個測試結果真傻眼,每秒居然只能處理不到 5 個 request,而且 concurrent 才只設定 20 而已。這個問題卡關幾個小時,仍無法找到效能低落的主因,期間發現打開 Tomcat 7 的 APR 會比預設的(BIO)模式效能更差,這和我對 APR(Native)模式理解有所出入。

這個測試結果比直接用 grails run-app 運行 development 模式的效能更差,雖然不太能夠理解真正原因,不過還是先嘗試將 Java EE 環境的版本調降。

改用 Oracle Java 6 + Tomcat 6 重新佈署。

$ ab -n 512 -c 20 http://localhost:8080/

oncurrency Level:      20
Time taken for tests:   12.629 seconds
Complete requests:      512
Failed requests:        0
Write errors:           0
Total transferred:      13351936 bytes
HTML transferred:       13202944 bytes
Requests per second:    40.54 [#/sec] (mean)
Time per request:       493.318 [ms] (mean)
Time per request:       24.666 [ms] (mean, across all concurrent requests)
Transfer rate:          1032.47 [Kbytes/sec] received

剛建置好的新環境,設定僅用預設值尚未經過調校,但測試結果已是正常水準。

沒有留言:

張貼留言

lyhcode by lyhcode
歡迎轉載,請務必註明出處!