cyril.hcwang@gmail.com
   前言   網站效能測試架構   安裝測試環境   分析   建議事項   結論
   儘管硬體能力不斷提昇,網站效能的重要    性卻日益增加。原因在於應用與使用量的    成長速度遠快於硬體的發展速度,所以僅    靠硬體的擴充將無法滿足業務擴充之所需。    另一方面,就算事前做了完整的效能規劃,    系統在實際的...
   在這個投影片中,我將利用 xhprof 這個工    具來分析由 php 所撰寫的網站程式,以期    了解其效能上的瓶頸,並提出改進建議。    此網站為真實運作多年的服務,已擁有不    少忠實的使用者。
   原本由 facebook 所開發,已於 2009 年成    為開放源碼程式。   支援 php 程式語言的運行環境。   提供函式層級的相關資訊 (Wall時間、CPU    時間、記憶體使用量)。   內建基本的 web ui...
   透過編譯模組的方式運行於 php 的執行環境。   需要修改程式才能運作。     可以透過 php 設定值 auto_prepend_file 自動執行相關     功能,進而避免修改所有程式。 函數層級的資訊雖然很有用,但是由...
線上網站服務器群       分析專用網站服務器 (xhprof)                         效能數據                       數據收集/分析服務器                       (xhp...
   為了數據的精準性,理應收集線上網站服    務器的運行數據。但是因為原本就有持續    監測測試服務器的反應狀態,發現測試服    務器與線上服務器有類似的反應趨勢,所    以先以測試服務器當做收集目標(分析專用    網站服務器)。...
   我們將收集到的資料存放到監測主機的    MySQL 之中,並利用 xhprof 這個 web ui    加以分析。採用 MySQL 除了可以支援更    多的資料筆數,未來各網站主機所收集的    資訊也可以統一集中管理與分析。 ...
   安裝 EPEL     下載合適的版本      http://mirror01.idc.hinet.net/EPEL/6/i386/repov      iew/epel-release.html     安裝下載的 rpm
   安裝 php-pecl-xhprof 與 php-pecl-mongo     yum install -y php-pecl-xhprof php-pecl-mongo
   安裝 git     yum install -y git
   安裝 xhprof (以 /var/www/lib 為例)     mkdir /var/www/lib     cd /var/www/lib     git clone https://github.com/preinheim...
   將    /var/www/lib/xhprof/xhprof_lib/config.sample.php    更名為 config.php   修改 /var/www/lib/xhprof/xhprof_lib/web/confi...
   修改 Apache 設定     …      ServerName www.myserver.tw      php_admin_value auto_prepend_file      /var/www/lib/xhprof/ex...
   安裝 EPEL     下載合適的版本      http://mirror01.idc.hinet.net/EPEL/6/i386/repov      iew/epel-release.html     安裝下載的 rpm
   安裝 MySQL     yum install mysql-server   設定 MySQL 帳號與密碼   修改 iptables 的設定,允許分析專用網站    服務器連結至 TCP 埠號 3306。   重新啟動 ip...
   建立數據收集所需資料庫     建立資料庫 xhprof     建立單獨使用的帳號     建立表格。表格 Schema 在檔案     /var/www/lib/xhprof/xhprof_lib/utils/Db/Mysql...
   安裝 git     yum install -y git
   安裝 xhprof (以 /var/www/lib 為例)     mkdir /var/www/lib     cd /var/www/lib     git clone https://github.com/preinheim...
   修改 Apache 的設定     Alias /xhgui /var/www/lib/xhprof/xhprof_html      <Directory /var/www/lib/xhprof/xhprof_html>      ...
   我們選定分析專用網站服務器上的首頁,    使用瀏覽器對其進行存取。   連結至 http://192.168.0.10/xhprof (其中    192.168.0.1 請取代為數據收集/分析服務    器的 IP 位址)。
   載入時間佔據整體運行時間一半以上    (22911ms/37569ms)。
1.   開啟 opcode 快取機制,如 apc。
   APC (Alternative PHP Cache)     yum install php-pecl-apc
   執行時間與記憶體用量同時減少     CPU Wall Time: 37569ms -> 18235ms (-      51.5%)     CPU Time: 31994ms -> 10998 ms (-65.6%)     ...
   因為此一改進僅分別針對單一 URL,對於    一整個網頁的完整下載時間仍受到其他因    素影響,所以仍須用其他方法持續改進使    用者的感受。
   當運用 xhprof 在線上環境時,為了避免產    生過多的數據而影響網站運行,可以採用    取樣的方式。舉例來說,可以每一千個請    求才記錄一次(隨機)。   採樣的頻率除了必須依據網站流量進行適    當的調整外,對於不同...
   PHP 之類的腳本語言 (Scripting    Language),在每次執行前都必須經過比編    譯語言更多的程序。透過 opcode 快取的    方式,可以大幅減少腳本程式解析所需的    時間。   透過實際觀察線上環境...
歡迎指教cyril.hcwang@gmail.com
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
Upcoming SlideShare
Loading in...5
×

如何使用 Xhprof 分析網站效能 (真實案例2)

2,318

Published on

如何使用 Xhprof 分析網站效能 (真實案例2)

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,318
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
22
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

如何使用 Xhprof 分析網站效能 (真實案例2)

  1. 1. cyril.hcwang@gmail.com
  2. 2.  前言 網站效能測試架構 安裝測試環境 分析 建議事項 結論
  3. 3.  儘管硬體能力不斷提昇,網站效能的重要 性卻日益增加。原因在於應用與使用量的 成長速度遠快於硬體的發展速度,所以僅 靠硬體的擴充將無法滿足業務擴充之所需。 另一方面,就算事前做了完整的效能規劃, 系統在實際的運作過程當中還是有可能遭 遇到不可預期的效能瓶頸。透過效能的分 析 (profiling),可以讓我們了解網站在運作 時的真實狀況,進而發現問題並解決之。
  4. 4.  在這個投影片中,我將利用 xhprof 這個工 具來分析由 php 所撰寫的網站程式,以期 了解其效能上的瓶頸,並提出改進建議。 此網站為真實運作多年的服務,已擁有不 少忠實的使用者。
  5. 5.  原本由 facebook 所開發,已於 2009 年成 為開放源碼程式。 支援 php 程式語言的運行環境。 提供函式層級的相關資訊 (Wall時間、CPU 時間、記憶體使用量)。 內建基本的 web ui 介面。 為 PECL 下的一個模組。  http://pecl.php.net/package/xhprof
  6. 6.  透過編譯模組的方式運行於 php 的執行環境。 需要修改程式才能運作。  可以透過 php 設定值 auto_prepend_file 自動執行相關 功能,進而避免修改所有程式。 函數層級的資訊雖然很有用,但是由於太過低層, 所以與使用者的實際情境(如網頁完整的下載時間) 之間必須有所對應。 僅提供一層的 traceback,對流程追蹤的能力有較 大的限制。 可以將收集到的資訊用任何方式呈現,但內建的 web ui 僅提供檔案儲存方式的呈現。如要呈現其他 的儲存方式,必須另尋工具或自行開發。
  7. 7. 線上網站服務器群 分析專用網站服務器 (xhprof) 效能數據 數據收集/分析服務器 (xhprof/MySQL)NFS 服務器 資料庫服務器
  8. 8.  為了數據的精準性,理應收集線上網站服 務器的運行數據。但是因為原本就有持續 監測測試服務器的反應狀態,發現測試服 務器與線上服務器有類似的反應趨勢,所 以先以測試服務器當做收集目標(分析專用 網站服務器)。一方面避免干擾原有的服務, 另外一方面也可以讓收集的數據單純化以 利分析。
  9. 9.  我們將收集到的資料存放到監測主機的 MySQL 之中,並利用 xhprof 這個 web ui 加以分析。採用 MySQL 除了可以支援更 多的資料筆數,未來各網站主機所收集的 資訊也可以統一集中管理與分析。 分析專用網站服務器與數據收集/分析服務 器皆安裝 CentOS 6。
  10. 10.  安裝 EPEL  下載合適的版本 http://mirror01.idc.hinet.net/EPEL/6/i386/repov iew/epel-release.html  安裝下載的 rpm
  11. 11.  安裝 php-pecl-xhprof 與 php-pecl-mongo  yum install -y php-pecl-xhprof php-pecl-mongo
  12. 12.  安裝 git  yum install -y git
  13. 13.  安裝 xhprof (以 /var/www/lib 為例)  mkdir /var/www/lib  cd /var/www/lib  git clone https://github.com/preinheimer/xhprof
  14. 14.  將 /var/www/lib/xhprof/xhprof_lib/config.sample.php 更名為 config.php 修改 /var/www/lib/xhprof/xhprof_lib/web/config.php  $_xhprof[dbhost] = 數據收集主機的IP  $_xhprof[dbuser] = MySQL 帳號  $_xhprof[dbpass] = MySQL 密碼  $_xhprof[dbname] = MySQL 資料表名稱  $_xhprof[servername] = web 主機名稱  $_xhprof[namespace] = 應用程式名稱
  15. 15.  修改 Apache 設定  … ServerName www.myserver.tw php_admin_value auto_prepend_file /var/www/lib/xhprof/external/header.php …  上述設定可以加在虛擬主機或是全域設定。 重新啟動 Apache  service httpd restart
  16. 16.  安裝 EPEL  下載合適的版本 http://mirror01.idc.hinet.net/EPEL/6/i386/repov iew/epel-release.html  安裝下載的 rpm
  17. 17.  安裝 MySQL  yum install mysql-server 設定 MySQL 帳號與密碼 修改 iptables 的設定,允許分析專用網站 服務器連結至 TCP 埠號 3306。 重新啟動 iptables 與 mongodb 服務。  service iptables restart  service mysqld restart
  18. 18.  建立數據收集所需資料庫  建立資料庫 xhprof  建立單獨使用的帳號  建立表格。表格 Schema 在檔案 /var/www/lib/xhprof/xhprof_lib/utils/Db/Mysql.p hp 內。
  19. 19.  安裝 git  yum install -y git
  20. 20.  安裝 xhprof (以 /var/www/lib 為例)  mkdir /var/www/lib  cd /var/www/lib  git clone https://github.com/preinheimer/xhprof
  21. 21.  修改 Apache 的設定  Alias /xhgui /var/www/lib/xhprof/xhprof_html <Directory /var/www/lib/xhprof/xhprof_html> Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory>  上述範例僅提供本機 (127.0.0.1) 連結 xhprof,請 根據實際情況加上合適的 IP 位址。 重新啟動 Apache  service httpd restart
  22. 22.  我們選定分析專用網站服務器上的首頁, 使用瀏覽器對其進行存取。 連結至 http://192.168.0.10/xhprof (其中 192.168.0.1 請取代為數據收集/分析服務 器的 IP 位址)。
  23. 23.  載入時間佔據整體運行時間一半以上 (22911ms/37569ms)。
  24. 24. 1. 開啟 opcode 快取機制,如 apc。
  25. 25.  APC (Alternative PHP Cache)  yum install php-pecl-apc
  26. 26.  執行時間與記憶體用量同時減少  CPU Wall Time: 37569ms -> 18235ms (- 51.5%)  CPU Time: 31994ms -> 10998 ms (-65.6%)  Peak Memory Usage: 4600096 bytes -> 1485786 (-67.7%) 載入時間所佔比例大幅減少 (1610ms/10998ms)
  27. 27.  因為此一改進僅分別針對單一 URL,對於 一整個網頁的完整下載時間仍受到其他因 素影響,所以仍須用其他方法持續改進使 用者的感受。
  28. 28.  當運用 xhprof 在線上環境時,為了避免產 生過多的數據而影響網站運行,可以採用 取樣的方式。舉例來說,可以每一千個請 求才記錄一次(隨機)。 採樣的頻率除了必須依據網站流量進行適 當的調整外,對於不同的應用時機也必須 隨之改變。例如當日常收集時可以採用較 低的比例,但是如果要追蹤特定的問題時, 就可以暫時提高取樣的頻率,以便"近距離" 觀察。
  29. 29.  PHP 之類的腳本語言 (Scripting Language),在每次執行前都必須經過比編 譯語言更多的程序。透過 opcode 快取的 方式,可以大幅減少腳本程式解析所需的 時間。 透過實際觀察線上環境的效能數據,可以 讓我們發現一些設定錯誤或網站成長所造 成的效能瓶頸。 解決效能問題是一連串不斷的改進,解決 了一個,還有下一個更困難的正在等著呢。
  30. 30. 歡迎指教cyril.hcwang@gmail.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×