медленная загрузка страниц

8

В настоящее время я сталкиваюсь с медленной загрузкой страницы с проверкой, являющейся самой медленной из всех с :

  • 28 запросов
  • 18,5 КБ передано (остаток кэшируется с диска или памяти)
  • Finish: 15.24s (загрузчик исчезает, и пользователь может что-то сделать)
  • DOMContentLoaded: 6.45 с
  • Загрузка: 10,28 с

Загрузка заказа / корзины заканчивается:

  • 29 запросов
  • Передано 28,5 КБ (остаток кэшируется с диска или памяти)
  • Финиш: 6,35 с
  • DOMContentLoaded: 1.9s
  • Загрузка: 3,79 с

пока пустая корзина имеет это:

  • 22 запроса
  • 8,2 КБ передано (остаток кэшируется с диска или памяти)
  • Финиш: 2,78 с
  • DOMContentLoaded: 1,22 с
  • Загрузка: 2,65 с

Я использую Redis для кэширования, и все кэши активны. Javascript минимизируется, объединяется и объединяется, а также CSS и HTML. Сервер довольно хорошо расположен с 8 процессорами, 16 ГБ оперативной памяти и SSD. Нагрузка и т. Д. Никогда не бывает достаточно высокой, чтобы о ней даже упоминали. В основном сервер спит ...

Всего около 80 товаров и один магазин. Мы не используем контентную часть Magento. Magento обслуживает только страницы с информацией о товаре, кассе и области клиента (а также бэкэнд). Перед Magento есть система CMS, которая обслуживает страницы менее чем за секунду, включая медиа.

Я вижу, что TTFB для кассового документа уже 5.66s. С включенным профилировщиком Magento я могу найти, что magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_bodyвызывает большую часть этого времени. Хотя не совсем понятно, чем именно это вызвано. Здесь профилировщик не может сильно помочь (мне по крайней мере).

magento->routers_match                                                                                                                                                                                                                                                                                            5.347600 5.347600 1  42,063,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index                                                                                                                                                                                                                                                    5.143997 5.143997 1  15,976,176 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body                                                                                                                                                                                                                                       5.143980 5.143980 1  15,975,304 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest                                                                                                                                                                                                           0.000609 0.000609 1  82.464     0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->EVENT:checkout_allow_guest->OBSERVER:checkout_allow_guest                                                                                                                                                                            0.000592 0.000592 1  80.944     0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT                                                                                                                                                                                                                               0.106220 0.035407 3  13,085,544 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_load                                                                                                                                                                                                                  0.000666 0.000666 1  136.56     0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_xml                                                                                                                                                                                                          0.005658 0.005658 1  174.632    0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks                                                                                                                                                                                                       0.099472 0.099472 1  12,755,648 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements                                                                                                                       0.099462 0.099462 1  12,902,296 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements                                                                                                    0.091426 0.091426 1  11,885,184 10,485,760
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->EVENT:core_layout_block_create_after                                                              0.000169 0.000003 51 -16.128    0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements                    0.000609 0.000609 1  52.76      0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->layout_generate_blocks->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements->Magento\Framework\View\Layout::Magento\Framework\View\Layout::generateElements->generate_elements 0.000455 0.000455 1  26.952     0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after                                                                                                                                                                                           0.000297 0.000297 1  16.32      0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->LAYOUT->EVENT:layout_generate_blocks_after->OBSERVER:persistent                                                                                                                                                                      0.000279 0.000279 1  14.776     0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch                                                                                                                                                                                                                         0.002972 0.002972 1  116.752    0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch                                                                                                                                                                                   0.002913 0.002913 1  110.192    0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor                                                                                                                                                        0.002900 0.002900 1  108.656    0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags                                                                                                                             0.001175 0.001175 1  77.784     0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_varnish                                                                                                0.000516 0.000516 1  35.056     0         
magento->routers_match->CONTROLLER_ACTION:checkout_index_index->action_body->postdispatch->EVENT:controller_action_postdispatch->OBSERVER:customer_visitor->EVENT:clean_cache_by_tags->OBSERVER:invalidate_builtin                                                                                                0.000629 0.000629 1  41.08      0

Я также включил профилировщик базы данных, но ни один запрос не занимает более 1 мс, несмотря на почти 120 вызовов. Но это составляет всего 120 мс.

Я сгенерировал профиль xdebug локально и вижу, что большая часть времени тратится на автозагрузку. Но я не уверен, что это "нормально". Мне просто интересно, почему file_exists вызывается так часто. Как мне показалось, все предварительно скомпилировано и кэшировано. Я использую composer dump-autoload -o --apcuпосле компиляции ди. И, конечно, APC работает.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

И все же я застрял здесь на данный момент. Кажется, я не могу понять, почему TTFB уже 5 секунд. И даже если бы я решил, что есть еще 10 секунд, чтобы объяснить и исправить. В настоящее время я предполагаю, что это некоторые xhr-запросы в фоновой блокировке. То есть. Я вижу, что методы оценочной доставки начинаются только после интенсивно большого промежутка времени, равного 7 секундам в 13 секунд, и занимают около 647 мс. Почему это так долго ждать, чтобы вызвать это? До тех пор, пока это не закончится, отображается анимация загрузчика, заставляющая страницу «зависать».

методы оценки доставки "задержка"

загрузка страницы оформления заказа

Любые пожелания приветствуются! Я надеюсь, что загрузка страницы не превышает 2 - 4 секунды. так вот с чего я начал.

Изменить: я исправил высокий TTFB. Как я уже сказал, я использую Redis для кеширования. Также для кэширования сеансов, но это приводит к блокировке между двумя одновременными сеансами. Фактически это запрос на оформление заказа и запрос на расчетную доставку, что приводит к 5-секундному таймауту. Я переключил сеансы обратно в обычный файловый режим. К сожалению, это не исправило долгое время загрузки! Моя текущая лучшая догадка состоит в том, что что-то заставляет оценочные методы доставки ждать перед вызовом, что приводит к блокировке страницы. Кроме того, я попытался отложить все JS без каких-либо изменений.

Edit2: Как заметил @ peter-ocallaghan, проблема с такой медленной загрузкой извлечения (+10 секунд) на самом деле является просто проблемой, связанной с Chrome, с открытой консолью dev. Оформить заказ / корзина, похоже, не влияет.

steros
источник
я не знаю намного больше об этом. Я столкнулся с этой проблемой, когда я звонил стороннему API или плагину. Это произошло, когда я не получил никакого ответа от него.
55840
Я сейчас пытаюсь устранить все, что может помешать. Я также вызываю сторонний API, поэтому я отключил это для теста. Без изменений. До сих пор я не мог исключить, что заставляет страницу загружаться так медленно.
steros
Я собираюсь выйти на конечность и предположить, что если вы закроете отладчик Chrome, время «волшебным образом» упадет (или, по крайней мере, значительно приблизится) к времени загрузки 2-4 секунды. Во время исследований сайтов M2 в режиме реального времени я не мог понять, как продавцы будут принимать 15-секундную загрузку. В конце концов я понял, что, используя хром-отладчик в качестве механизма синхронизации, я непреднамеренно замедлял запрос на порядок.
Питер О'Каллаган
Я просто проверял это. Большинство страниц занимают не менее ~ 4 секунд, а время загрузки - до 7 секунд. Но, по крайней мере, проверка не загружается через 15 секунд во всех других браузерах, более как 5 секунд. Кажется, это что-то с хромом.
steros
Мне удалось сократить время, используя memcached для кеширования сессии. Как уже упоминалось, я использовал redis, но это привело к блокировке, поэтому я переключился обратно на файлы, но кажется, что блокировки тоже. Поэтому я переключился на memcached, и теперь корзина загружается в ~ 2 сек при второй загрузке и 5-7 сек при первой. Кажется, что методы оценки и доставки, а также итоговая информация являются блокирующими. Если я просто перезагружу корзину без изменений, то это 2 секунды. Если я добавляю товар или просто меняю сумму и обновляю корзину -> 5-7 сек.
стеро

Ответы:

3

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

'session' =>
array (
  'save' => 'redis',
  'redis' =>
  array (
    'host' => '127.0.0.1',
    'port' => '6379',
    'password' => '',
    'timeout' => '2.5',
    'persistent_identifier' => '',
    'database' => '2',
    'compression_threshold' => '2048',
    'compression_library' => 'gzip',
    'log_level' => '1',
    'max_concurrency' => '6',
    'break_after_frontend' => '5',
    'break_after_adminhtml' => '30',
    'first_lifetime' => '600',
    'bot_first_lifetime' => '60',
    'bot_lifetime' => '7200',
    'disable_locking' => '0',
    'min_lifetime' => '60',
    'max_lifetime' => '2592000'
  )
),

Но так как у меня есть проблема блокировки сессии, я думаю, что это учитывается:

break_after_frontend

Число секунд ожидания перед тем, как попытаться снять блокировку для сеанса внешнего интерфейса (т.е. витрины).

Это означает, что всегда есть задержка макс. 5 секунд. Когда я переключился на сессию memcached, стало немного лучше, потому что ожидание было меньше. По умолчанию используются следующие настройки:

memcached.sess_lock_wait_min => 1000
memcached.sess_lock_wait_max => 2000
memcached.sess_lock_retries => 5

Это значения по умолчанию из более старой версии php-memcached. Новейшая версия предлагает эти значения по умолчанию:

memcached.sess_lock_wait_min => 150
memcached.sess_lock_wait_max => 150
memcached.sess_lock_retries => 200

Прочитав эти два документа: https://github.com/php-memcached-dev/php-memcached/pull/350 https://github.com/php-memcached-dev/php-memcached/issues/269.

Я пробовал с:

ini_set('memcached.sess_lock_wait_min', 150);
ini_set('memcached.sess_lock_wait_max', 150);
ini_set('memcached.sess_lock_retries', ini_get('max_execution_time') * 1000 / 150);

в index.php Magento, и это снова ускоряет процесс. Теперь я получаю нагрузку проверки примерно за 4 секунды. Корзина немного медленнее с ~ 5 секундами из-за загрузки итоговой информации. (все сначала попробуйте без кеширования браузера)

Я полагаю, что исправление проблемы с блокировкой сеанса снова ускорило бы время загрузки, поскольку просмотр профилей показывает, что session_start()для нескольких вызовов все еще существует ожидание от 300 до 800 мс.

steros
источник
Я тоже застрял на этом Сатеросе. Я использую лак с обходным путем для https и Redis. Сайт работает медленно. Пересматривал новые реликвии и не могу найти окончательного ответа. Это проблема Redis?
Адарш Хатри
1

Возможные оптимизации:

Profiler

Мистер льюис
источник
0

Используя Solar, Memcache или Varnish, вы можете ускорить свой сайт magento.

Пуспалата Паниграхи
источник
Я использую Redis и memcached. Я не могу использовать Varnish, так как он не поддерживает https, и я не хочу использовать один из обходных путей.
Стерос
@steros Пожалуйста, просмотрите мой профиль, профиль сети для контактной информации и свяжитесь со мной по Skype для помощи.
Уилсон Хаук