TTFB Дольше в Google Cloud, чем AWS с той же конфигурацией

Давно скрывался, первый раз постер в сети StackExchange

Я ломал голову над этим последние пару дней, прочитал много обсуждений и много чего пробовал, но не заметил абсолютно никакого движения. Вот ситуация:

Я установил блок EC2 бесплатного уровня в качестве промежуточной машины на Ubuntu 14.04 с LEMP, в частности Nginx и PHP7 с WordPress. Мы создали сайт, все работает нормально. Его TTFB составляет 505 миллисекунд.

Я установил блок облачных вычислений бесплатного уровня в качестве производственной машины с такой же конфигурацией, но TTFB составляет 14 секунд. Знайте, что спецификации на коробке Google немного лучше, чем на EC2. g1-small (1 виртуальный ЦП, 1,7 ГБ памяти) по сравнению с t2-micro (1 виртуальный ЦП, 1 ГБ памяти). SSD-накопители с обеих сторон.

Я пробовал много вещей, включая многие методы диагностики проблем TTFB, описанные в этом ответе https://serverfault.com/a/350422 . Я также пробовал увеличить объем памяти для PHP и WordPress. Я пробовал устанавливать пакеты и плагины, которые люди предлагают для оптимизации производительности. Я особенно борюсь с тем фактом, что моему промежуточному экземпляру ничего из этого не требовалось. Прежде чем вы спросите: "Почему бы вам просто не сделать все это на AWS", Знайте, что использование Google Cloud Compute для производства является обязательным требованием для этого проекта.

В моих обсуждениях с людьми кто-то сказал, что в Google Cloud нет сброса вывода для обслуживания контента до завершения ответа. Может ли кто-нибудь подтвердить?

Заранее благодарим за любую информацию, которую вы можете предложить, чтобы указать мне правильное направление для решения этой проблемы. Кроме того, дайте мне знать любые другие подробности, которые я могу предложить, чтобы упростить решение этой проблемы.


ИЗМЕНИТЬ ОДИН: Отвечая на вопросы ниже. Большое спасибо за предложение помощи.

Два сервера находятся в одном географическом месте? Насколько велика разница?

Экземпляр EC2 находится на востоке США или в Вирджинии. t иметь промывку вывода для обслуживания содержимого до завершения ответа. Может ли кто-нибудь подтвердить?

Заранее благодарим за любую информацию, которую вы можете предложить, чтобы указать мне правильное направление для решения этой проблемы. Кроме того, дайте мне знать любые другие подробности, которые я могу предложить, чтобы упростить решение этой проблемы.


ИЗМЕНИТЬ ОДИН: Отвечая на вопросы ниже. Большое спасибо за предложение помощи.

Два сервера находятся в одном географическом месте? Насколько велика разница?

Экземпляр EC2 находится на востоке США или в Вирджинии. t иметь промывку вывода для обслуживания содержимого до завершения ответа. Может ли кто-нибудь подтвердить?

Заранее благодарим за любую информацию, которую вы можете предложить, чтобы указать мне правильное направление для решения этой проблемы. Кроме того, дайте мне знать любые другие детали, которые я могу предложить, чтобы упростить решение этой проблемы.


ИЗМЕНИТЬ ОДИН: Отвечая на вопросы ниже. Большое спасибо за предложение помощи.

Два сервера находятся в одном географическом месте? Насколько велика разница?

Экземпляр EC2 находится на востоке США или в Вирджинии.

Находятся ли два сервера в одном географическом месте? Насколько велика разница?

Экземпляр EC2 находится на востоке США или в Вирджинии.

Находятся ли два сервера в одном географическом месте? Насколько велика разница?

Экземпляр EC2 находится на востоке США или в Вирджинии. Экземпляр GCE находится в US-West1a, который, как я полагаю, находится в Орегоне. Я нахожусь в Нью-Йорке, поэтому географической разницы недостаточно, чтобы оправдать 14-секундный TTFB. Кроме того, инструменты, которые я использовал, имеют географическое положение, такое как Даллас (разумная середина между двумя городами), и также сообщают о TTFB за 14 секунд.

Первое, что нужно выяснить, это где задержка. Измените свой вопрос, включив> изгиб веб-сайта Google, соответствующую запись журнала доступа Nginx, любую> соответствующую запись журнала ошибок Nginx и журналы доступа / ошибок PHP. Необходимо включить доступ к PHP> журналам. Также посмотрите «сверху», пока происходит завиток, и сделайте> типичный снимок экрана. Наконец, поделитесь тестами webpagetest.org> обеих сред, чтобы продемонстрировать проблему, запутанных, если ваши доменные имена> являются секретными - поисковые роботы все равно находят все домены. - Тим 3 часа назад

  • cURL

    time_namelookup: 0. 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 и mysqld.

PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + КОМАНДА 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

Ничего в журналах PHP-FPM.

  • Запись журнала ошибок PHP

Ничего из этого запроса, но я сделал запрос браузера до этого, и вот что в медленном журнале (я поставил окно на 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
  • EC2 Timeline

https://www.screencast.com/t/vxHTCcyf

  • GCE Timeline

https: //www.screencast .com / t / 22OXgA7T

Самым очевидным, что можно попробовать, было бы написать barebones-скрипт hello world php> и измерить ttfb этого скрипта, если вы еще этого не сделали. Если это где-то около 14, то> у вас проблема, не имеющая ничего общего с wordpress или базой данных. > "Google Cloud не делает" форматировать и монтировать том при загрузке в ecs? Я хочу, чтобы мой постоянный том (ebs) был отделен от моей конфигурации запуска группы с автоматическим масштабированием. Чтобы он не был случайно автоматически удален терраформом или чем-то еще. Также я могу кое-что сделать ...

Я хочу, чтобы мой постоянный том (ebs) был отделен от моей конфигурации запуска группы с автоматическим масштабированием. Чтобы он не был случайно автоматически удален терраформом или чем-то еще. Также я могу сделать что-то вроде / mnt / taskname , чтобы у меня был отдельный том персистентности для каждой задачи, требующей данных.

Вот как я думаю, это будет работать.

  1. установить aws-cli для по какой-то причине он отсутствует (пакеты в облаке init), что происходит поздно?
  2. используйте команду aws для присоединения тома
  3. отформатируйте том с помощью fs_setup в облаке init
  4. смонтируйте разделы с помощью монтирования в облаке init

Проблема в том, что это не сработает, потому что 1 не произойдет до 3 и 4 (я думаю), и я не совсем уверен, что 2 - правильный способ присоединить том.

Может быть, мне не следует использовать изображение, оптимизированное для ecs? похоже, что это решит мою проблему, но тогда мне нужно было бы выяснить, что изменить изображение амазонки (базовое?), чтобы оно было настроено иначе, как изображение ecs? может есть другой способ присоединить том, кроме команды aws ? может быть какая-то другая магия, кроме той, что я рассматриваю полностью?

3
задан 10 May 2017 в 03:21
1 ответ

Это частичный ответ, так как я все еще работаю над ним. Во-первых, я использую простой AMI Amazon Linux, а не оптимизированный для ECS (который устарел ... )

data "template_file" "AttachVolume" {
  template = "${file("cloudinit/attach_volume.sh")}"

  vars {
    volume = "${aws_ebs_volume.Nexus.id}"
  }
}

data "template_cloudinit_config" "CloudInit" {
  part {
    filename     = "fs.cfg"
    content_type = "text/cloud-config"
    content      = "${file("cloudinit/fs.yml")}"
  }
  part {
    filename = "attach_volume.sh"
    content_type = "text/cloud-boothook"
    content = "${data.template_file.AttachVolume.rendered}"
  }
}

вот самая важная часть, attach_volume.sh , которая присоединит том, затем разделит его и отформатирует, если необходимо.

#!/bin/sh
set -x
EC2_VOLUME_ID="${volume}"
EC2_INSTANCE_ID="`curl --silent http://169.254.169.254/latest/meta-data/instance-id`"
aws ec2 attach-volume --volume-id $EC2_VOLUME_ID --instance-id $EC2_INSTANCE_ID --device /dev/xvdh --region us-east-1
while [ ! -d /sys/block/xvdh ]; do sleep 1; done
if [ ! -d /sys/block/xvdh/xvdh1 ]; then
    echo -e "g\nn\np\n1\n\n\nw" | fdisk /dev/xvdh
    mkfs.ext4 /dev/xvdh1
fi

тогда мы можем использовать стандартную облачную конфигурацию для его монтирования.

#cloud-config
---
mounts: 
 - [ xvdh, '/srv/nexus', 'auto', 'defaults,noexec', '0', '0' ]
runcmd: 
 - [ cloud-init-per, instance, chmod, chmod, 1777, /srv/nexus ] # make like temp, then docker can write whatever user directories in their
 - [ cloud-init-per, instance, docker, service, docker, start ] # start docker
 - [ cloud-init-per, instance, ecs, start, ecs ] # start ecs
0
ответ дан 3 December 2019 в 07:56

Теги

Похожие вопросы