symfony性能问题

时间:2016-11-17 08:33:36

标签: performance symfony

我正在使用symfony 2.8.12在两个不同的项目中工作并遇到同样的问题:性能。

加载时间太长(不是所有时间,但大部分时间),当我看到探查器时,总会有一个"有罪的组件": 它可以是防火墙,控制器,配置文件监听器,内核响应....是几秒钟的执行时间(有时长于10)。

example case example case 2

在不同的线程中读取我试图将db设置为修复ip(如果它是dns查找问题), 在php.ini中修改了一些参数但没有改变。这在我的本地和远程环境中都很重要,它甚至可以启用PHP加速和OPCache。

我的代码没有做任何特别的事情,即使我在" hello world"页面,它有点令人沮丧:)

2 个答案:

答案 0 :(得分:11)

这种情况正在发生,因为在开始打印“Hello world”之前,symfony有数千个文件需要阅读。实际上,您的硬盘驱动器对symfony的效率影响最大。幸运的是,几乎没有简单的步骤可以达到一个令人满意的水平。

  1. PHP.ini中:
    将这两个参数设置为比默认值高得多的值,即
    realpath_cache_size = 4096k
    realpath_cache_ttl = 7200
  2. dump composer autoload:
    composer dump-autoload --optimize - 这会创建带有已加载类的转储文件
  3. 我不知道你如何使用opcache,但我鼓励你安装apcu模块。之后,在symfony config_prod.yml中使用元数据缓存:
    doctrine:
    orm:
        metadata_cache_driver: apc
        result_cache_driver: apc
    
  4. 与常规网站相比,您的网站/ app.php应该有一些额外的行:

    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\ClassLoader\ApcClassLoader;
    
    $loader = require __DIR__.'/../app/autoload.php';
    include_once __DIR__.'/../app/bootstrap.php.cache';
    
    $apcLoader = new ApcClassLoader(md5($_SERVER['HTTP_HOST']), $loader);
    $loader->unregister();
    $apcLoader->register(true);
    
    require_once __DIR__.'/../app/AppCache.php';
    $kernel = new AppKernel('prod', false);
    $kernel->loadClassCache();
    $kernel = new AppCache($kernel);
    Request::enableHttpMethodParameterOverride();
    $request = Request::createFromGlobals();
    $response = $kernel->handle($request);
    $response->send();
    $kernel->terminate($request, $response);
    
  5. 其他但也非常重要:

    1. 使用PHP 7,效率显着提升,
    2. 将PHP与FPM(FastCGI进程管理器)一起使用
    3. 使用无SQL解决方案来缓存查询,即Redis,Elasticsearch
    4. 禁用xdebug - 确保探查器未显示您使用它。
    5. 事实上这个名单很长,但是在最常见的情况下,前4分加上第8分就可以了。 我希望它会有所帮助。

答案 1 :(得分:1)

您是否在php.ini中启用了xdebug扩展程序?

如果是这种情况,请尝试禁用它,特别是在生产环境中。