Загрузка страницы в Magento занимает слишком много времени


10

У меня есть сайт Magento. Пользователей нет (максимум 2-3 за раз).

Наш сервер: ЦП: 2000 МГц, ОЗУ: 2048 МБ, жесткий диск: 50000 МБ.

Я установил ZendServerCE (apc + memcached + Zend Optimizer + Zend Data Cache). Я выключил memcached, потому что сайт загружен намного хуже. Я установил структуру плоского типа, переиндексировал и кэшировал данные в консоли администратора.

Так что у меня есть apc + Zend Optimizer + Zend Data Cache .

  1. Первая проблема - я проверил во время выполнения, как работает диспетчеризация. Вызов start_session () занимает около 500-700 мс. Кажется, это не очень хороший результат. Почему так долго, я не знаю.

  2. Я прочитал это: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size и выяснил оптимальные варианты для моего сервера.

В час:

Key_read_requests = 8887
Key_reads         = 252
Key_write_request = 187
Key_writes        = 146 

Вы видите, что 252/8887> 0,01, но не слишком много. Это оптимальное значение, которое я когда-либо получал. Другие результаты начались с> 6.

Вот мой.cnf:

key_buffer              = 48M
myisam_sort_buffer      = 2M
sort_buffer             = 2M
read_buffer_size        = 2M
join_buffer             = 2M
read_rnd_buffer         = 2M
max_allowed_packet      = 128M
thread_stack            = 192K
thread_cache_size       = 16
query_cache_type        = 1
myisam-recover         = BACKUP
max_connections        = 50
table_cache            = 256
#thread_concurrency     = 10
query_cache_limit       = 8M
query_cache_size        = 98M

3. Memcached по какой-то причине не был хорош. Я выключил это. Но кеш данных Zend и оптимизатор Zend все еще работают.

4 APC кажется правильным. Загрузка контроллера в первый раз занимает 3-4 секунды (я установил die (), чтобы проверить это), и в первый раз это займет 1 - 1,3 секунды.

5 Через несколько минут я перезапустил MySQL, я получил хороший результат. Страницы загружались от 1,5 до 2,5 секунд. Но сейчас (через несколько часов) это занимает 6-10 секунд. Я не могу найти причину.

Итак, вы видите здесь неправильную конфигурацию? Может быть, мой сервер не подходит для magento?

ОБНОВЛЕНИЕ 1: около 600 категорий и 1000 продуктов сегодня и около 20000 категорий (для разных интернет-магазинов) и 1500-3000 продуктов в будущем.

Есть не так много атрибутов.

ОБНОВЛЕНИЕ 2 Я обнаружил, что консоль ssh работает слишком медленно. Я перезагрузил сервер, и теперь он работает быстро. значит у меня проблема с оперативной памятью. Недостаточно места.

Это начальный статус без Apache:

             total       used       free     shared    buffers     cached
Mem:          2048        600       1447

ОБНОВЛЕНИЕ 3 Я получил это. Теперь он загружается за 0,5-1,5 сек.

Вот конфигурация: MySQL

[mysqld]
key_buffer_size         = 256M
tmp_table_size      = 32M
max_heap_table_size     = 32M
myisam_sort_buffer      = 4M
sort_buffer             = 4M
read_buffer_size        = 4M
join_buffer     = 4M
read_rnd_buffer     = 4M
max_allowed_packet  = 64M
thread_stack        = 192K
thread_cache_size       = 16
query_cache_type        = 1
myisam-recover          = BACKUP
max_connections         = 20
table_cache             = 1024
innodb_buffer_pool_size = 128M
query_cache_limit   = 24M
query_cache_size        = 256M

PHP

[apc]
apc.stat=1
apc.enabled=1
apc.optimization=0
apc.cache_by_default=1
apc.shm_segments=10
apc.shm_size=256M
apc.ttl=0
apc.user_ttl=0
apc.num_files_hint=10000
;apc.mmap_file_mask="/tmp/apc"
apc.max_file_size=5M
apc.enable_cli=1
apc.mmap_file_mask="/tmp/apc.XXXXXX"
apc.slam_defense=0
apc.user_entries_hint=10000

Все работает отлично, но остается один вопрос. APC показывает мне эту статистику: введите описание изображения здесь

Почему хиты такие маленькие? Любые идеи?


Было бы неплохо, если вы напишете пару строк о вашей установке Magneto (например, размер каталога, модификации, расширения и т. Д.).
user487772

Никто не сможет просто опубликовать серию файлов конфигурации, чтобы вы могли правильно настроить свой сервер. Есть десятки файлов; конкретные изменения программного и системного уровня, которые необходимо выполнить, чтобы максимально использовать имеющееся у вас оборудование.
Бен Лессани - Сонасси

Пожалуйста, опишите, почему вы устанавливаете downvote
Энтони

@Tim, я обновил вопрос
Энтони

2
Я бы заглянул xhprofи попытался получить визуализацию того, что занимает больше всего времени для загрузки. Это рабочий сервер под нагрузкой или просто для тестирования?
Philwinkle

Ответы:


6

Поскольку вопрос кажется не слишком ориентированным на magento, вот мой не очень ориентированный на magento ответ.

Кэширование OpCode и оптимизация БД - это хороший способ ускорить работу ваших веб-приложений. Но выгода будет относительно умеренной. Чтобы получить реальный прирост скорости, вы должны рассмотреть возможность использования кэша лака. Это открытый исходный код, его легко конфигурировать и легко интегрировать с magento благодаря свободно доступным модулям для magento.

Есть также хорошая статья с кратким обзором того, как это работает: http://www.fabrizio-branca.de/make-your-magento-store-fly-using-varnish.html

Особенно рассмотрим график:

Страницы / второй


4
Лак отлично подходит, если у вас уже есть быстрый магазин и вы хотите компенсировать ресурсы. Но его никогда не следует использовать, чтобы скрыть тот факт, что магазин работает медленно. Страницы по-прежнему должны быть сгенерированы в первую очередь - поэтому они всегда будут иметь время загрузки страницы 6-10 секунд, независимо от того.
Бен Лессани - Сонасси

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

2

Если ваш бизнес зависит от эффективности вашего хостинга, почему вы пытаетесь администрировать сервер без опыта?

Вы наверняка выиграете, просто связавшись со специалистом хоста Magento и предоставив им возможность позаботиться о системном администрировании, пока вы делаете то, что умеете, управляя своим магазином.

Глядя на ваши спецификации, у вас недостаточно оперативной памяти, чтобы пытаться запустить магазин Magento. Есть множество подобных вопросов, как у вас,

https://serverfault.com/a/400748/113375 .
/server/430565/magento-hosting-on-a-budget


Потому что наш клиент имеет ограниченный бюджет. Я должен заплатить за хост magento более 50 евро за месяц. У нас есть ограничение на хост 150-200 евро в год-) В любом случае, спасибо за ссылки
Энтони

1
Тогда клиент может рассчитывать на доход ~ 20-40 000 долларов в год при 100% оптимизации (хостинг - это 0,5-1% дохода). Здесь много людей, которые могут дать вам все подробности и технические настройки, но вы пытаетесь сделать слишком много с небольшим. Вы могли бы заставить его работать с технической стороны, но с деловой стороны он потерпит неудачу. Если загрузка динамических страниц (без fpc) не превышает 3 с, вы теряете 56% посетителей, в идеальном случае таргетинг на 1-2 с - конверсии Google и посетителей накажут сайт в противном случае - сложный вызов. Учитывая ситуацию, вероятность 95-99%> 3s загрузки страницы и / или сайта падает.

1

Это физическое оборудование или виртуальный частный сервер? Возможно, вам следует переместить вашу базу данных на собственный выделенный сервер. Это также дает вам возможность изолировать, связаны ли ваши проблемы со скоростью с Apache / PHP или с MySQL.

start_session () медленный означает, что вы, вероятно, страдаете от недостаточного аппаратного обеспечения. Я не знаю, означает ли ваш выбор технологии, что сеансы хранятся на диске или в ОЗУ, но 500-700 мс почти наверняка означают, что они хранятся на диске, и у вас возникают проблемы с производительностью ввода-вывода - возможно, потому что ваша база данных обмен на диск, потому что он не помещается в оперативной памяти ... но это все домыслы.

Удачи!


Спасибо за Ваш ответ! Я использую VPS. Это не очень подходит для magento, но у меня есть задача оптимизировать его в этой области. Можно ли проверить, является ли база данных подкачкой на диск?
Энтони

1
free -mсообщит вам, если вы вообще используете swap, а самые последние версии topкоманды сообщат вам, если нажать O и P, чтобы упорядочить с помощью swap. В противном случае вам придется вернуться к использованию идентификатора процесса mysqld с чем-то вроде этого: awk '/^Swap:/ { SWAP+=$2 } END { print SWAP" kB" }' /proc/$(pidof mysqld)/smaps Все описано здесь: dbasquare.com/2012/04/10/…
Ральф Тис

1

Очевидно, что нет способа показать вам «рабочую конфигурацию», которая повысит вашу производительность, но Magento действительно пытается сделать что-то подобное и публикует пример высоко сконфигурированного стека LAMP в своих технических документах. Методология этих технических документов относится к CE и EE. Я настоятельно рекомендую прочитать оба документа полностью, поскольку предложенные идеи перекликаются с большей частью этой темы и содержат очень конкретные рекомендации Magento, непосредственно из источника: http://www.magentocommerce.com/whitepaper/


1

конфигурация

ZendFramework (Zend-оптимизатор и Zend-кеш данных) + APC + Memcache + Nginx

работает идеально для меня.

более 30 одновременно работающих пользователей могут загрузить страницу менее чем за одну секунду (~ 0,4 с - 0,6 с)

Я установил nginx на 80 порт (как прокси) и apache на 8080.

Спасибо @MattSchweers за ссылки. Я забыл об этом. Это помогает мне настроить MySQL


нет проблем! Я на самом деле использовал эти документы для некоторых настроек MySQL на этой неделе - работал хорошо.

1

По моему опыту, сервер litespeed повышает производительность в 2 раза, что стоит $ 1 / месяц лицензии на 1 процессор. Мне сказали, что вам нужна только лицензия 1cpu, так как php работает отдельно в litespeed.


Веб-сервер не является узким местом. PHP есть, переход на Litespeed вообще ничего не изменит.
Бен Лессани - Сонасси

Хотя я в целом согласен с тем, что Litespeed - отличный выбор для Magento, этот ответ, вероятно, не решит проблему, поставленную OP, и выходит за рамки его заявленного бюджета.
Престон

0

Когда у вас есть несколько интернет-магазинов и несколько категорий, Magento по сути создает своего рода каретный продукт записей для всех интернет-магазинов, категорий и продуктов, что значительно увеличивает нагрузку на базу данных. Ваши промахи APC довольно высоки, и вам нужно изучить это. Однако даже если вы исправите APC, я думаю, что ваша проблема с производительностью может сохраниться, особенно если ваш трафик увеличивается. Чтобы ускорить ваш сайт, вам нужно установить операционный кеш, Varnish или Full page cache (если Enterprise Edition).

Magento выполняет много операций чтения в БД, поэтому вы также можете попытаться, чтобы ваш MySQl в режиме репликации «ведущий-ведомый» имел все чтения magento с ведомого, в то время как запись происходит с ведущим.


0

Я бы попробовал изменить следующие параметры APC и посмотреть, подхватывают ли попадания.

apc.shm_segments 1

apc.ttl 7200

apc.user_ttl 7200

На живом сайте вы также можете использовать следующее.

apc.stat 0

Это остановит проверку APC, изменился ли файл с момента его последней компиляции, что даст вам хороший прирост скорости. Только не забудьте очистить кэш APC при редактировании файлов PHP.


0

Пара других мыслей. Возможно, вы захотите увеличить свой innodb_buffer_pool_size, 128M может быть немного ниже, и даже небольшие сайты могут расти очень быстро. Переменная определяет, сколько ваших данных хранится в памяти.

Magento использует это для всех своих таблиц, включая таблицы журналов, которые быстро растут. Вы хотите убедиться, что вы ограничиваете количество этих данных, которые вы храните. Запуск "php shell / log.php --status" из командной строки даст вам представление о том, где вы находитесь, и если он выходит из-под контроля. Есть также варианты очистки таблиц журнала с ним.

С 2 ГБ ОЗУ не так много работы, поэтому вы должны быть осторожны с тем, куда вы распределяете свою память.

Кроме того, Full Page Cache + Cache Warmer может помочь быстро и быстро заполнить каталог и страницы cms вашего сайта. Вы можете увидеть наши здесь: http://ecommerce.brimllc.com/full-page-cache-magento.html

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.