您在這裡

如何增進效能

Superman's 的頭像
Superman 在 2011-04-21 (四) 10:08 發表

Dear ALL :

我還是Drupal系統調校的菜鳥
隨著安裝模組的增加,
發現每當required 一個網頁時,花的時間越來越長
可是我不清楚如何去觀查我的問題在哪裡
我裝了devel module
看到了drupal 捉資料的時間
可是專業度不夠
不知道如何下手
首先,要如何去發現影響系統效能的元兇
我要從哪些角度去觀查 ????
web server 設定
php 設定
mysql 設定
或者其它的東西

請教大家寶貴的經驗

這真是一個大的問題!!

開一個網頁有超過 3 秒嗎?(其實不會這麼慢。一般來說除了模組管理之外,一秒以內應該都能開出來。)

如果是在 windows 上開發嫌慢的話,其實這是正常的。我在 windows, linux 與 mac 上都有在開發 (linux 上面我只是玩玩,主要在 mac 上開發)。在 windows 上,有時隨便開一個網頁都會 time out。可是在 mac 上面,從沒碰過這個問題,「刷」一下就出來了。

如果在網站上超過 3 秒的話,那真的要解決了。因為 google 在認識你的網站的時候,也會測速度。速度慢的網站,搜尋排名時會排在後面。

一般來說,會先試試使用 cache。再進一步探討的話,要看你的網站是做什麼應用。

by the way,可以使用 chrome 的開發工具測看看下載網頁時,慢在哪裡。

Art (無有多少 | 通通學)

不知是否我失憶還是有相似的主題,我好像之前回過這個貼子...

Windows 的 PHP 在大量讀取目錄檔案差效能很差,一般處理也差一點,一些很基本的頁面,差 50~100% (PHP 5.3 好一點)
Mysql 在 Windows & Linux 的連接時間大約有 30ms 相差 (固定增值),Mysql 5.5 以上好一點,但在很小的應用中,應該是沒有大差別

像 Drupal 7,很多新手都應該偶然覺得進入時很慢,這由於執行內置 CRON 引起,關一關就沒事
有時會 timeout,也可能是 request update 資料 (特別是 firewall 封鎖了,就至少待個 30 秒,如果剛好你的 PHP 執行時間只有 30 秒,大概只有看見 timeout)

Devel 中有:
Display query log
Display page timer
Display memory usage

打開看看就知問題

也可以設定 XHProf / Xdebug 深入一點 :)

---
notaBlueScreen

原來 PHP 在 windows 底下效能有差。一開始我只能確定這真的是 windows 的問題,因為我在 Mac, Linux 底下使用 Drupal 從沒有這麼慢過,還慢到 timeout!! Firewall, 防毒甚至都為它關閉了說。簡直就是二個不同的世界。 !@#$%^

那麼,是否不建議使用 windows 的虛擬主機作為 Drupal 的平台?還是說不同的 windows 版本 (如 windows server 2xxx, 一陣子沒摸 windows server,不知道現在的版本叫什麼。),會有顯著的不同效能差異?

願聞其詳。

Art (無有多少 | 通通學)

主要是因為 Windows 使用 NTFS 作為底層的檔案系統。
我有朋友曾經在 Windows 下裝一個 VM 跑 Ubuntu,結果在 VM 裡面的網站跑出來的速度甚至比 Windows 下直接跑的還快~

對對,我就是這麼做的。

讓我想起在解決 windows 底下速度慢的問題時,在 drupal.org 上看到一個結論:在 windows 上安裝 ubuntu 的 vm,然後在 ubuntu 上面開發。

另外還有一個比較多人支持的結論:改掉 amp 工具中的 apc, eacceralator, 換成 zend server,可以得到提升五倍的速度。(my solution: zend server)

只是這二個工程都不小。

不知 tokimeki 是在哪種作業系統上操作?

Art (無有多少 | 通通學)

換成 zend server 這個我幹過,的確工程不小,不過我要講,這個加速效果在 PHP 5.3 以上比較明顯。
原因是 PHP 5.2 的 fastcgi 還是很爛~

我目前還是在 Window 7 上做,不過東西都丟到 RAMDISK 上,所以還好~
話說 Drupal 7 for Portable APM (PAPM) 這個很久沒更新了,今天下午來搞這個好了。

哇,受教了,果然提問還是對的。

我覺得你提到的使用 ramdisk 方法最好,最簡單,又不用更換作業系統環境,又馬上有效。

對啊,這麼簡單的作法,我們這些老工程師在 20 幾年前幾乎都用這個方法。呵,腦袋不靈光。

找個時間,我也來試一下 PAPM.

@superman,

建議你使用 ramdisk 這個方法。不需要再學習 / 轉換別的作業系統了。

Art (無有多少 | 通通學)

為了你這個問題,我又重新測試了一下。測試的網頁就跟在 drupal.org 中看到的,大家討論 windows 下的速度時,都以開啟模組管理頁面的時間來作評比。

方法:重頭開機 (避免 windows 自己的 cache), 啟動 twamp, 進入首頁, 接下來,測試開啟模組管理頁面的速度。

未使用 ramdisk: 15 秒。
使用 ramdisk: 9 秒。

只是還沒有到達在 mac / linux 底下的速度。我想這是作業系統的差異吧。我開啟 mac 中的 drupal 7 (這個裝了更多的模組),結果是 3 秒。

Art (無有多少 | 通通學)

Windows 7 64bits + PHP 5.3.6 + Apache 2.2 + Wincache + mod_fcgid 非常好,更優於 virtualbox 下的 LAMP。

首頁,10 個有圖片的 nodes:

Windows:
Executed 52 queries in 67.3 ms. Queries exceeding 5 ms are highlighted. Page execution time was 167.33 ms. Memory used at: devel_boot()=0.6 MB, devel_shutdown()=3.1 MB, PHP peak=3.5 MB.

Virtualbox Linux:
Executed 52 queries in 9.97 ms. Queries exceeding 5 ms are highlighted. Page execution time was 316.52 ms. Memory used at: devel_boot()=0.36 MB, devel_shutdown()=3.4 MB, PHP peak=4 MB.

在此配置的 Windows,載入模組頁面只要: 5xx ms (比一般非 fastCGI/Wincache 應快上 1.x ~3.x+)

(
不過比較有點不公平,
Virutalbox Linux 是 PHP 5.2 + HDD
Windows Apache 是 PHP 5.3 + SSD,
不過在此最重要是如何提升效能,不公平也不要緊,
之前非 Wincache + mod_fcgid 設置,也在 SSD,也很差
)

大家可以試一試,
我過兩週有空再深入一點分享/比較 :)

Dear ALL :

謝謝Artt and Kay.L 的分享
效能的改善真的是很大的學問

因為時間的考量,
所以我應該在mac or linux 的環境開發

請問 mac or Linux 何者更利於drupal的開發

@Superman,

在 Linux 下應該是最好的,說效能,你只是在 Dev Site,其實也有差別,但也可能是你能忍受的差別 (每人的忍受能力不同)
自己試一試最好,下一個 Virtualbox,再安裝,花不了多少時間

我分享不好的地方:你要從 Windows 複製檔案 (小的檔案,如 Drupal) 至 Linux 內會很慢,經常要用搜尋檔案內容功能的也很慢
不過,你可以不傳小檔案,或只會等待一次這麼多,搜尋直接在 Linux 執行,不經你的 Windows IDE

Linux 下的 GIT / Drush 方便太多 (個人覺得)
---
notaBlueScreen

再做另類嘗試
VMware + shared folder 效能很佳 !!!

Executed 52 queries in 5.63 ms. Queries exceeding 5 ms are highlighted. Page execution time was 179.5 ms. Memory used at: devel_boot()=0.59 MB, devel_shutdown()=3.29 MB, PHP peak=3.75 MB.

這回不怕讀取檔案慢了,絕對適合喜歡 LINUX 的用戶

呵呵,只要使用 linux,效果都不錯。這樣的話,跟在 drupal.org 中討論的結果一致:在 windows 中使用 linux。哈哈,只是這樣的話,我不覺得是「解決在 windows 下速度慢的問題」。但是這個卻是大家最贊同的好辦法。

使用 shared folder 是個好辦法。我使用的是 mac,其中也有裝 windows,就是利用 shared folder 進行資料的交換,不需要再 copy 一次,蠻好用的。

請問 virtual box 可以這麼做嗎?還是只有 vmware 才有 shared folder 的功能。

這個有趣,我之前試沒效果,是用 Ubuntu SERVER edition (有可能裝了有 BUG 旳 VBOX 工具)
現在用 Desktop 版本,數據很不同

我再來試試:
http://bit.ly/lUF53J

這樣來看,
如果你不用 LINUX 工具,或特殊原因,在 Windows 下加 FASTCGI + WINCACHE 是最好,不用弄這麼多東西,
否則選擇 VirtualBox

太好了,我最愛的 VirtualBox 能留下
上面的結果,作為 Dev 平台很足夠了

** (一會再新安裝 SERVER 版本在 VirtualBox 看看)

EDIT:
重新安裝 Ubuntu 11.04 SERVER,沒問題
Ubuntu 9.04 SERVER,即使是同一版本的 VBOX addon 都是慢
所以大家遇上慢,不妨多試試

從 Kay 提供的資料,看起來 ubuntu 11.0.4 加上 VBox 真的不錯。

另外,加上 wincache 後的效能不錯嘛,這樣可以不用換到 linux。

感謝分析。

補充:

當我重新安裝好一齊 LAMP 東西後,又慢了,
算是發現主因,跟 XDEBUG 有一點關係 ....

VBOX SHARED FOLDER 可能有 CACHE 問題,可以嘗試關閉 HOST I/O 去解決

@Superman >> 太抱歉,在你的主題說這麼多無關的東西

@Kay.L >> 不要這麼說, 要產生有價值的東西之前,首先就要讓大家暢所欲言, 而且很感謝你宝貴經驗的分享

我從大家的分享中得到很多, 雖然還無法讓這些東西,消化成為知識, 因為我和你們的程度實在有很多的差距

可是你們的經驗, 可以給我學習的方向

分享帶給大家的就是另一個創造的開始

@superman,

回到你的問題,
你要找出是 MYSQL / PHP 問題

如 DEVEL LOG:

Executed 52 queries in 5.63 ms. Queries exceeding 5 ms are highlighted. Page execution time was 179.5 ms. Memory used at: devel_boot()=0.59 MB, devel_shutdown()=3.29 MB, PHP peak=3.75 MB.

這段與 DB 相關
Executed 52 queries in 5.63 ms

這段與 PHP 有關
Page execution time was 179.5 ms
如果是 PHP 這邊,要用到 XDEBUG / XHProf