關于symfony性能
Hi,洪大師:
? ? ? ? ? ? ? 有個關于symfony的性能問題想請教一下,我們目前用symfony做了一個項目,通過對discuz做的一個依賴注入來實現插件的開發,實現方式是在discuz加載配置的時候載入了symfony并重寫了 discuz的配置。這個就導致了我們現在開發的這個產品的性能上不去,目前測tps (每秒事務數)也就是 100左右,discuz原生的環境首頁tps在500左右,在symfony框架下輸出phpinfo在我們的測試環境下tps只有300左右 。
?目前symfony部分已經做的優化:
在web/app.php中開啟apc緩存加載:
$loader= require_once __DIR__.'/../app/bootstrap.php.cache';
$apcLoader = new ApcClassLoader(sha1(__FILE__), $loader);
在app/config/config.yml中開啟了doctrine的查詢緩存,將doctrein的metadata_cache_driver,query_cache_driver,result_cache_driver,設置為redis緩存
在將symfony設置為prod模式.ps:這一塊可能有點問題,因為我在轉為prod模式的時候出現Segmentation fault 提示,但是我看了額app/cache的目錄下 prod的文件夾也生成了。去google了好久也沒找到問題的所在,在源碼中抓 也沒抓到,好奇怪。
在composer中的自動加載也做了優化?composer dump-autoload --optimize ,優化了生成了一個自動加載的數組。
大師,你看看還有什么地方可以再做優化的么?
以上的壓測數據是單臺壓測的結果。
我們的項目的PV大概有1400W。架構里面有3臺php機,前面2臺代理機,3臺mysql(1主2從),2臺redis(主從)所有現在壓測的結果是不符合要求的。
謝謝了
By ?山雞的機
2015-05-04
如果是這種搭配其他框架使用的例子我建議你把sf2的項目做成一個單獨的項目,然后用sso之類的方法去做跨項目之間的用戶共享。
doctrine的cache如果你在操作數據不是很頻繁的時候其實幫助是不大的。
composer dump-autoload --optimize其實主要就是把你的vendor里的所有php類預先載入一個大的php文件,這樣載入起來就會比較快。
從性能優化上來說,sf2由于默認開啟的功能和組件非常多,有很多你如果用不到的東西可以關掉,當然也有很多地方可以優化,但我我建議你先裝一個系統調用圖生成工具,把運行一個具體業務時的所有sf2內部的調用給打印出來,看一下具體時間都耗費在什么上了,然后再去有的放矢的去做優化。