重新以 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
剛建置好的新環境,設定僅用預設值尚未經過調校,但測試結果已是正常水準。
沒有留言:
張貼留言