TTFB mais no Google Cloud do que no AWS com a mesma configuração

1

Long tempo lurker, pôster da primeira vez na rede do StackExchange.

Eu tenho trabalhado nisso nos últimos dois dias e li muitos tópicos e tentei muitas coisas, mas não vi absolutamente nenhum movimento. Aqui está a situação:

Eu configurei uma caixa EC2 de camada livre como uma máquina de teste no Ubuntu 14.04 com o LEMP, especificamente Nginx e PHP7 com o WordPress. Nós construímos o site e tudo funciona bem. Tem um TTFB de 505 milissegundos.

Eu configurei uma caixa Cloud Compute de camada gratuita como uma máquina de produção com a mesma configuração, mas o TTFB é de 14 segundos. Saiba que as especificações da caixa do Google são um pouco melhores que as do EC2. g1-small (1 vCPU, 1,7 GB de memória) vs. t2-micro (1 vCPU, 1 GB de memória). SSDs em ambos os lados.

Eu tentei muitas coisas, incluindo muitos dos métodos para diagnosticar problemas do TTFB que estão nesta resposta link . Eu também tentei aumentar a memória para PHP e WordPress. Eu tentei instalar pacotes e plugins que as pessoas têm sugerido para otimização perf. Estou lutando especificamente com o fato de que minha instância de teste não precisava disso. Antes de perguntar "por que você não faz tudo na AWS", saiba que o uso do Google Cloud Compute para produção é um requisito para esse projeto.

Nas discussões que tive com as pessoas, alguém disse que o Google Cloud não tem liberação de saída para veicular conteúdo antes que a resposta seja concluída. Alguém pode confirmar?

Agradecemos antecipadamente por qualquer insight que você possa oferecer ao me apontar na direção certa para resolver isso. Além disso, deixe-me saber quaisquer outros detalhes que eu possa oferecer para tornar isso mais fácil de resolver.

EDIT ONE: Respondendo as perguntas abaixo. Muito obrigado por se oferecer para ajudar.

Are the two servers in the same geographic location? How big is the difference?

A instância do EC2 está no leste dos EUA ou na Virgínia. A instância do GCE está no US-West1a, que acredito estar no Oregon. Estou em Nova York, portanto não há diferença geográfica suficiente para justificar um TTFB de 14 segundos. Além disso, as ferramentas que usei têm posições geográficas como Dallas (um ponto médio razoável entre as duas cidades) e também reportam o TTFB 14s.

First thing to work out is where the delay is. Please edit your question to >include a curl of the Google website, the matching Nginx access log entry, any >matching Nginx error log entry, and the PHP access / error logs. PHP access >logs need to be enabled. Also watch "top" while the curl is happening, and take >a representative screenshot. Finally, please share webpagetest.org tests of >both environments to demonstrate the problem, obfuscated if your domain names >are secret - web crawlers find all domains anyway. – Tim 3 hours ago

  • 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

Eu não tenho pontos de reputação suficientes para postar uma imagem ou um link para outra imagem, mas quando corro o php-fpm7.0 e o mysqld popup.

PID EXP UTILIZADOR DE VÍDEO RES SHR S% CPU% MEM TEMPO + COMANDO 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

  • Entrada de registro de acesso ao Nginx

    [07 / May / 2017: 06: 01: 58 +0000] "GET / HTTP / 1.1" 200 58528 "-" "curl / 7.35.0"

  • Entrada de registro de erros do Nginx

Nada de novo aqui com essa solicitação

  • entrada de log do PHP Access

Nada nos registros do PHP-FPM.

  • Entrada de log de erros do PHP

Nada desta solicitação, mas eu fiz uma solicitação de navegador antes e aqui está o que está no log lento (coloquei a janela em 5 segundos):

[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
  • EC2 Timeline

link

  • Linha do tempo do GCE

link

The most obvious thing to try would be to write a barebones hello world php >script and measure ttfb of that, if you haven't. If it's anywhere near 14s then >you have a problem that has nothing to do with wordpress or the database. >"Google Cloud doesn't have output flushing" applies to Google App Engine HTTP >responses, which are returned en bloc -- so this is not applicable to compute >instances.

Sim, eu fiz isso. Hello World e outros arquivos estáticos respondem rapidamente. O PHPInfo também responde rapidamente. Se bem me lembro, todos os arquivos simples e estáticos estavam em torno de 700 ms TTFB. Obrigado pelo esclarecimento sobre o flush de saída que só é relevante para o Google App Engine. Pelo menos eu sei que é uma solução simples que estou perdendo.

A única coisa que eu tenho visto que me dá qualquer coisa para trabalhar é o logging PHP lento.

[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

Isso me fez pensar que as consultas ao banco de dados são lentas, mas instalei o plugin de monitoramento de consultas para o WP e todas as consultas estão sendo executadas rapidamente.

    
por ipullrank 07.05.2017 / 03:13

1 resposta

0

A causa mais provável do atraso é a diferença de infraestrutura subjacente entre a AWS e o GCP - no mundo da nuvem, as folhas de especificações nem sempre refletem o desempenho real, e usar o conjunto mais barato de tipos de instância é Nunca é uma boa ideia se você quiser avaliar o desempenho.

Quase todos os ângulos de desempenho no GCP estão vinculados ao número de CPUs - 2 Gb de rede por núcleo de CPU, por exemplo. Além disso, no Google Cloud, uma g1-micro é uma máquina com núcleo compartilhado . Do link:

Shared-core machine types provide one virtual CPU that is allowed to run for a portion of the time on a single hardware hyper-thread on the host CPU running your instance.

Na AWS, t2.micro é classificado como burstable - que, em face disso parece semelhante ao modelo de núcleo compartilhado do Google, mas é sutilmente diferente:

T2 instances’ baseline performance and ability to burst are governed by CPU Credits. Each T2 instance receives CPU Credits continuously, the rate of which depends on the instance size. T2 instances accrue CPU Credits when they are idle, and use CPU credits when they are active. A CPU Credit provides the performance of a full CPU core for one minute.

Para realizar uma comparação por igual, sugiro strongmente o uso de tipos de instância de melhor desempenho em ambos os lados para garantir a disponibilidade de recursos, por exemplo, um Amazon m3.medium e o Google n1-standard-1 - ambos fornecendo 1 CPU e 3.75GB de RAM.

Para remover a geografia de sua lista de possíveis culpados, eu também localizaria sua instância do AWS no us-west-2, que também fica no Oregon - pode estar mais longe do seu local, mas pelo menos você estará testando duas instâncias que estão a uma distância semelhante, em vez de uma próxima e outra distante.

Eu também tentaria recriar as instâncias várias vezes para proteger contra "vizinhos barulhentos" e peculiaridades de hardware - se você estiver usando o gerenciamento de configuração (e se estiver executando na nuvem, você deve estar) isso deve ser um doddle.

    
por 16.05.2017 / 23:02