老子是山鸡
2015-05-02 15:34
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 山鸡的机
如果是这种搭配其他框架使用的例子我建议你把sf2的项目做成一个单独的项目,然后用sso之类的方法去做跨项目之间的用户共享。
doctrine的cache如果你在操作数据不是很频繁的时候其实帮助是不大的。
composer dump-autoload --optimize其实主要就是把你的vendor里的所有php类预先载入一个大的php文件,这样载入起来就会比较快。
从性能优化上来说,sf2由于默认开启的功能和组件非常多,有很多你如果用不到的东西可以关掉,当然也有很多地方可以优化,但我我建议你先装一个系统调用图生成工具,把运行一个具体业务时的所有sf2内部的调用给打印出来,看一下具体时间都耗费在什么上了,然后再去有的放矢的去做优化。
洪大师带你解读Symfony 2框架
20610 学习 · 245 问题
相似问题