很长时间潜伏者,第一次在StackExchangenetworking上的海报。
过去几天,我一直在喋喋不休地思考这个问题,并且阅读了大量的文章,尝试了很多东西,但是看到了绝对没有任何动作。 情况如下:
我在Ubuntu 14.04上用LEMP,特别是Nginx和PHP7与WordPressbuild立了一个免费的EC2等级箱作为登台机器。 我们已经build立了网站,一切工作正常。 它有一个505毫秒的TTFB。
我使用相同的configuration将免费层云计算框设置为生产计算机,但TTFB为14秒。 知道Google盒子上的规格比EC2上的要好一些。 g1-small(1个vCPU,1.7 GB内存)与t2-micro(1个vCPU,1 GB内存)。 双方的SSD。
我已经尝试了很多东西,包括诊断TTFB问题的很多方法,这些问题在这个答案https://serverfault.com/a/350422 。 我也试图增加PHP和WordPress的内存。 我已经尝试安装包和插件,人们build议进行性能优化。 我特别困难的事实,我的分期实例不需要这一点。 在您问“为什么不在AWS上完成”之前,您知道使用Google Cloud Compute进行生产是此项目的一项要求。
在与人们进行的讨论中,有人表示Google云在响应完成之前没有输出缓冲区来提供内容。 谁能确认?
在此先感谢您提供的任何见解,指出我正确的方向来解决这个问题。 另外,让我知道任何其他细节,我可以提供更容易解决。
编辑一:回答下面的问题。 非常感谢你提供帮助。
两台服务器在同一地理位置吗? 差别有多大?
EC2实例位于美国东部或弗吉尼亚州。 GCE实例在美国West1a,我相信这是在俄勒冈州。 我在纽约市,所以没有足够的地理差异来certificate14秒的TTFB。 另外,我使用的工具还有地理位置,如达拉斯(两个城市之间的合理的中点),并报告14s TTFB。
首先要解决的是延迟的地方。 请修改您的问题>包括Google网站的卷页,匹配的Nginx访问日志条目,任何>匹配的Nginx错误日志条目和PHP访问/错误日志。 PHP访问>日志需要启用。 在发生curl的同时还要观看“顶部”,并拍摄一个有代表性的截图。 最后,请分享两个环境的webpagetest.orgtesting来演示这个问题,如果您的域名是秘密的,则模糊处理 – networking爬虫无论如何都会find所有的域名。 – 蒂姆3小时前
curl
time_namelookup:0.000n
time_connect:0.078n
time_appconnect:0.000n
time_pretransfer:0.078n
time_redirect:0.000n
time_starttransfer:13.469n
time_total:13.469n
我没有足够的声望点发布图像或链接到另一个图像,但是当我运行顶部时,php-fpm7.0和mysqldpopup。
PID USER PR PR NI VIRT RES SHR S%CPU%MEM TIME + COMMAND 24625 www-data 20 0 374680 43352 30376 S 0.7 2.5 0:00.90 php -fpm7.0 21244 mysql 20 0 870388 71088 11012 S 0.3 4.1 0:10.57 mysqld
Nginx的访问日志条目
[07 / May / 2017:06:01:58 +0000]“GET / HTTP / 1.1”200 58528“ – ”“curl / 7.35.0”
Nginx错误日志条目
这个请求没有什么新东西
PHP-FPM日志中没有任何内容。
这个请求没有什么,但是我之前做了一个浏览器请求,这里是缓慢的日志logging(我把窗口放在5秒):
[07-May-2017 06:01:48] [pool www] pid 24625 script_filename = /var/www/html/wordpress/index.php [0x00007fad55e12810] mysqli_real_connect() /var/www/html/wordpress/wp- includes/wp-db.php:1540 [0x00007fad55e126f0] db_connect() /var/www/html/wordpress/wp-includes/wp-db.php:658 [0x00007fad55e12620] __construct() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products.php:7 [0x00007fad55e12590] edb_db_init() /var/www/html/wordpress/wp-content/themes/xxxx/inc/db/items.php:258 [0x00007fad55e124d0] edb_get_product_link() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products.php:23 [0x00007fad55e123c0] edb_display_frontpage_items() /var/www/html/wordpress/wp-content/themes/xxxx/page-templates/home.php:95 [0x00007fad55e121e0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-includes/template-loader.php:74 [0x00007fad55e12140] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-blog-header.php:19 [0x00007fad55e120a0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/index.php:17
最明显的尝试将是编写一个准系统你好世界的PHP>脚本,并衡量它的ttfb,如果你没有。 如果是14秒左右,那么>你有一个与wordpress或数据库无关的问题。 >“Google Cloud没有输出刷新”适用于Google App Engine HTTP>响应,这些响应是整体返回的 – 所以这不适用于计算>实例。
是的,我已经做到了。 Hello World和其他静态文件快速响应。 PHPInfo也响应迅速。 如果我没有记错,所有简单和静态的文件都是700毫秒左右的TTFB。 感谢您澄清输出刷新只与App Engine相关。 至less我知道有一个简单的解决scheme,我只是想念。
我唯一看到的就是PHP缓慢的日志logging。
[07-May-2017 00:56:39] [pool www] pid 24793 script_filename = /var/www/html/wordpress/index.php [0x00007fad55e14810] mysqli_real_connect() /var/www/html/wordpress/wp-includes/wp-db.php:1540 [0x00007fad55e146f0] db_connect() /var/www/html/wordpress/wp-includes/wp-db.php:658 [0x00007fad55e14620] __construct() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products.php:7 [0x00007fad55e14590] edb_db_init() /var/www/html/wordpress/wp-content/themes/xxxx/inc/db/items.php:258 [0x00007fad55e144d0] edb_get_product_link() /var/www/html/wordpress/wp-content/themes/xxxx/inc/artist-products$ [0x00007fad55e143c0] edb_display_frontpage_items() /var/www/html/wordpress/wp-content/themes/xxxx/page-templat$ [0x00007fad55e141e0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-includes/template-loader.php:74 [0x00007fad55e14140] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/wp-blog-header.php:19 [0x00007fad55e140a0] [INCLUDE_OR_EVAL]() /var/www/html/wordpress/index.php:1
这让我觉得数据库查询很慢,但是我为WP安装了查询监视插件,并且所有的查询都显示为执行的很快。
延迟最可能的原因是AWS和GCP之间的基础架构差异 – 在云计算世界中,规格表并不总是真实的反映真实世界的性能,使用最便宜的实例types永远不是好如果你想基准性能的想法。
几乎GCP中的每个性能angular度都与CPU的数量有关 – 例如,每个CPU核心的2Gbnetworking数量。 另外,在Google Cloud上, g1-micro
是共享核心机器。 从链接:
共享内核机器types提供了一个虚拟CPU,允许在运行实例的主机CPU上的单个硬件超线程上运行一段时间。
在AWS上,一个t2.micro
被分类为可 t2.micro
– 表面上看起来与谷歌的共享核心模型类似,但是略有不同:
T2实例的基准性能和突发能力受CPU Credits支配。 每个T2实例连续接收CPU Credits,其速率取决于实例大小。 T2实例闲置时产生CPU积分,并在积分时使用CPU积分。 CPU信用提供了一分钟的完整CPU内核的性能。
为了进行真正的类似比较,我强烈build议在双方使用更高性能的实例types以保证资源的可用性,例如Amazon m3.medium
和Google n1-standard-1
– 都提供1个CPU和3.75GB的内存。
为了从可能的罪魁祸首中删除地理信息,我还会将您的AWS实例定位在位于俄勒冈州的us-west-2,它可能距离您的位置更远,但至less您会testing两个实例距离相近,而不是近一远。
我也会尝试多次重新创build实例,以防止“吵闹的邻居”和硬件怪癖 – 如果你正在使用configurationpipe理(如果你在云中运行,你应该),这应该是一个轻而易举的事情。