笔记本电脑和服务器的性能差异,如何解决?
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" ]
如果没有效果,换个服务器:)
我用 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
文件
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" ]
如果没有效果,换个服务器:)