2012-05-16 52 views
3

我正在一個應用程序(Symfony 1.4/Doctrine),有一些頁面是非常沉重的加載。其中一個頁面包含一個非常複雜的關係表(嵌入表單)。該頁面做的是這樣的:獲取所有對象,創建窗體(使用對象),渲染窗體。APC不會爲Symfony1.4/Doctrine應用程序提供任何性能提升?

這會導致每頁大約1.5秒的加載時間。 MySQL似乎不是瓶頸,查詢需要大約0.01秒。但是,保溼結果需要更多的時間:大約0.3秒。創建和嵌入所有子窗體也需要很多時間(0.5s)。剩下的時間用在Symfony/Doctrine常規方法中。所有這些時間都在Symfony計時器和/或xdebug中找到。

我希望通過使用APC進行操作碼緩存,可以加快生產服務器上的進程。所以我安裝了APC,做了一些配置(緩存大小= 400MB;最大文件大小= 20MB,可以肯定),並最終對應用程序進行基準測試。

沒有APC:

$ ab -n 100 
Requests per second: 0.72 [#/sec] (mean) 
Time per request:  1392.142 [ms] (mean) 
Time per request:  1392.142 [ms] (mean, across all concurrent requests) 
Transfer rate:   130.62 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  4 5 3.6  4  32 
Processing: 1301 1387 258.0 1338 3549 
Waiting:  1229 1315 258.2 1267 3475 
Total:  1305 1392 258.0 1342 3553 

隨着APC:

$ ab -n 100 
Requests per second: 0.86 [#/sec] (mean) 
Time per request:  1160.666 [ms] (mean) 
Time per request:  1160.666 [ms] (mean, across all concurrent requests) 
Transfer rate:   156.67 [Kbytes/sec] received 

Connection Times (ms) 
       min mean[+/-sd] median max 
Connect:  4 4 0.7  4  9 
Processing: 1071 1156 164.1 1121 2337 
Waiting:  1024 1104 164.3 1065 2286 
Total:  1075 1161 164.1 1125 2341 

有一點改善,但結果是相當令人失望。爲了確保APC運行良好,我還對在同一臺服務器上運行的Drupal網站進行了基準測試。這幾乎是Drupal網站的請求/秒(從4頁/秒到8頁/秒)的兩倍!所以APC工作正常。

有沒有人有線索可能是這種加速不足的原因?有沒有人在有或沒有APC的Symfony應用程序上做過一些基準測試?我可以在互聯網上找到一些索賠/秒的應用程序,但都沒有基準。

+0

您是否配置了doctrine查詢緩存以使用apc,如下所述:http://readthedocs.org/docs/doctrine/en/latest/en/manual/caching.html#query-cache? – greg0ire

+0

@chiborg:我很確定它的確如此(這是doctrine 1.2的文檔,而且代碼看起來對我來說很熟悉),是什麼讓你說它沒有? – greg0ire

+0

你能發佈你的apc.ini嗎? – palmic

回答

4

操作碼緩存僅加速原始類的加載。大部分時間代碼循環訪問數據庫結果,創建複雜的對象時,APC本身無法幫助。

原則支持緩存查詢和結果,但是,需要配置APC中的緩存。看到這個網址:http://readthedocs.org/docs/doctrine/en/latest/en/manual/caching.html

也許你可以使用apc_add緩存創建後的表單。這有可能向用戶呈現陳舊的數據,但也許值得。

要獲得更多信息,爲什麼需要這麼長時間,你應該看看profiling with XDebug

+0

建議使用查詢/對象緩存(可以使用apc緩存驅動程序),你會得到我的upvote – greg0ire

+0

@ greg0ire我沒有意識到Doctrine 1有一個緩存系統。真棒!已刪除我的評論,並將您的鏈接添加到我的答案。 – chiborg

+0

+ 1,並看到我的編輯,教條的結果緩存可以做你的建議。 – greg0ire