引言
為什麼我會寫這一篇部落格,因為最近很多京東雲擎jae的使用者反應一個問題就是他們部署在jae上面的應用訪問很慢,有極少數應用甚至經常出現504逾時現象,當然大家首先想到的是jae效能太差,這也是人之常情,往往出現什麼錯誤的時候首先想到是別人的不好,工作中很多同事也是這樣,如果軟體系統出現一個bug首先懷疑的肯定不是自己寫的代碼。今天花時間寫這一篇部落客要就是告訴大家怎樣確定我們部署在PAAS平台(不僅僅是JAE哦)web應用為什麼慢?慢在哪兒了?有什麼方法可以解決?
原因分析
出現訪問自己web應用慢從宏觀上可以總結為下面三點:
(1)網路慢:具體來說就是訪問者同部署web應用的PAAS平台之間的網路慢;
(2)PAAS平台效能出現問題:具體來說就是由於各種原因導致PAAS平台不能很好服務部署在它上面的應用;
(3)web應用本身慢:由於各種原因(頻繁讀寫磁碟,大量耗時的計算,資源競爭等)導致web應用不能很快的響應訪問者的請求。
上面三點主要總結於web應用的訪問路徑,因為訪問PAAS平台的web應用首先需要經過網路,然後經過PAAS平台的過濾和轉寄等處理,最後才到達web應用本身處理。這三個環節任何一個出現問題都會導致web應用訪問變慢。知道原因了,我們還需要判斷到底是哪一個環節出現了問題,下面就說說怎樣定位具體的環節。
定位具體原因
上面分析的三個原因除了第二個原因以外,大家都可以自己定位和排除,首先檢查網路,為了更加準確我們可以從一下方面進行排除:
(1)首先檢查訪問其他網站是否出現很慢的現象,如果很快,那麼說明你的網路肯定大體上是正常的;
(2)訪問對應PAAS平台提供的相關網站和PAAS平台所屬公司的網站,例如JAE,你可以訪問京東商城主站和京東雲平台首頁等,BAE可以訪問百度相關網站,SAE可以訪問新浪相關網站,因為這些關連網站一般部署在同一個機房或者同一個城市,如果這些網站也很慢,那多半說明這些網站相關機房網路出現問題或者訪問量很大,導致這些網站對外出口流量和訪問速度變慢,也就是對外提供服務的能力扛不住了,如果沒有問題,那麼可以排除大的網路環境是沒有問題的;
排除了網路因素,我們就可以排除後面兩個原因了,由於PAAS平台的效能對使用者基本上是透明的,就是使用者基本上無從得知,所以可以直接跳過這個原因的排除,當然其實是有手段的,只是稍微複雜,所以不方便所有使用者,如果是這種原因最好還是交給PAAS平台的開發人員去處理。
最後一個原因當然就是web應用自身的實現了,我發現很多使用者反饋的網站訪問慢的原因都是由於自己代碼實現的問題。
首先出現問題的網站大多數是有一定訪問量的,特別是某一個時間段出現訪問量巨大,而且頻繁讀寫磁碟。為了定位這種原因希望大家把應用部署在自己本地使用web效能測試工具做驗證即可,例如比較常用的web效能測試工具ab,這個事apache內建的測試載入器,ubuntu下安裝和使用都非常方便,例如我們直接在控制台中輸入ab,如果沒有安裝,ubuntu系統會如下提示:
The program 'ab' is currently not installed. You can install it by typing:
sudo apt-get install apache2-utils
然後安裝提示安裝即可,安裝成功以後我們就可以使用ab軟體對我們部署在本地的web應用進行效能測試評估了,命令如下:
ab -n1000 -c10 http://localhost/
上面命令的意思是總共發送1000次請求,每次10各並發請求,訪問的路徑就是本地web伺服器的根路徑,結果如下:
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 177 bytes
Concurrency Level: 10
Time taken for tests: 0.075 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 446000 bytes
HTML transferred: 177000 bytes
Requests per second: 13283.74 [#/sec] (mean)
Time per request: 0.753 [ms] (mean)
Time per request: 0.075 [ms] (mean, across all concurrent requests)
Transfer rate: 5785.69 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 0 1 0.2 0 2
Waiting: 0 0 0.2 0 2
Total: 0 1 0.1 1 2
ERROR: The median and mean for the processing time are more than twice the standard
deviation apart. These results are NOT reliable.
Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 1
90% 1
95% 1
98% 1
99% 1
100% 2 (longest request)
本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/tools/