笔记本电脑和服务器的性能差异,如何解决?

Performance difference on laptop and server, how to fix it?

我用 Symfony 3.1 和 PHP7 构建了一个 Web 应用程序。在我自己的计算机上它 运行 没问题,但在 Web 服务器上它非常慢。现在我想知道为什么。不仅让网络应用程序 运行 更快,而且对软件本身有更多了解。

我自己的电脑有一个 Intel i7 处理器和 8 GB 内存,运行在 Ubuntu 16.10 上运行。服务器有两个内核,4 GB RAM 和 运行s on CentOS 6.

笔记本电脑和服务器的比较

我的笔记本电脑

网络服务器:

它们在硬件和软件方面都不同,所以我不希望它们完全相同,但我不明白为什么它们之间存在巨大差异:Symfony 初始化速度快 13 倍,Twig 模板的渲染速度提高了 25 倍。

我使用 Symfony 分析器和 Blackfire.io 找出我的应用程序运行缓慢的原因,但这只能解释应用程序本身的性能。由于页面在我的计算机上快得多,我必须找出应用程序在我的网络服务器上变慢的原因。

IOPS?

我发现 this blog 如何使用 fio 测试磁盘性能。我发现我的计算机的性能比服务器好大约 20 倍(19.9K/6718 vs 1056 /375 iops)。好像 iops 是瓶颈。

下一步是什么?

一个解决方案非常简单:获得一台具有更好 iops 性能的服务器。

但是我如何才能知道如何改进我的申请?或者我的网络服务器的设置?我已经安装了 Opcache,据我所知(使用 this tool),它工作正常。

1 - 检查 opcache 是否已激活且配置正确。将 opcache.max_accelerated_files 的值增加到最大值,因为 Symfony 会加载大量文件。

2 - 为自动加载过程生成更丰富的 class 映射,运行 此命令:composer dump-autoload --optimize.

3 - 在您的服务器上获取 SSD 磁盘。您不需要很多 space,128gb 对 Symfony 来说已经足够了,如果您需要很多额外的 space.

,请使用普通磁盘存储您的资产

4 - 使用像 Redis 或 Memcache 这样的 RAM 缓存。例如,在我安装 Redis 并在我的 config.yml 文件

中正确配置 Doctrine 后,我在 Windows 上的加载时间减少了 200%
orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    auto_mapping: true
    metadata_cache_driver:
        type: service
        id: doctrine.cache
    query_cache_driver:
        type: service
        id: doctrine.cache
    result_cache_driver:
        type: service
        id: doctrine.cache

和服务文件:

  doctrine.cache:
    class: Doctrine\Common\Cache\PredisCache
    arguments: [ "@redis" ]

如果没有效果,换个服务器:)