100% ЦП при выполнении 4 или более одновременных запросов с Magento

В настоящее время у меня проблемы с сервером под управлением Magento, он невероятно медленный.

Это VPS с несколькими установками Magento, которые используются для разработки, так что я единственный, кто их использует. Когда я делаю 4 запроса все 2 секунды друг за другом, я заканчиваю через 10 секунд. Медленно, но все же в пределах моего терпения. Однако когда я выполняю 4 "одновременных" запроса (очень быстро открываю 4 вкладки подряд), все четыре ядра переходят на 100% и остаются там в течение минуты.

Как это возможно?

Я знаю, что здесь много возможностей, поэтому любые советы о том, как заставить сервер Apache/PHP работать быстрее, также приветствуются.

Раньше он работал намного быстрее, и я также пробовал APC, но он продолжал вызывать проблемы (ошибки PHP, что-то с пулами памяти), поэтому я отключил его.

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

Виртуальное оборудование:
4 ядра и 4096 МБ оперативной памяти
Своп никогда не используется (проверяется с помощью htop) 100 ГБ дискового пространства, из которых 10% используется

Программного обеспечения:
Debian 6 DirectAdmin и apache custombuild PHP 5.2.17 (CLI)

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

4 ответа

Magento работает ужасно медленно, когда вы отключаете кеширование, особенно на VPS, поскольку он должен анализировать тонну XML-файлов. То, как она отображает страницу, позволяет легко добавлять новые элементы по всей странице, но также требует некоторых массивных SQL-запросов и загрузки XML-файлов.

Таким образом, отключение кэша означает, что magento должен читать эти xml-файлы при каждом поступающем запросе. Таким образом, каждый процесс теперь конкурирует за процессор и дисковый ввод-вывод. На VPS-диске IO - это место, где ваша горлышко бутылки будет находиться в 90% случаев. Таким образом, все 4 параллельных процесса запрашивают чтение большого количества xml-файлов, что приводит к большой загрузке ЦП в процессах apache.

если вы делаете strace на одном из процессов apache, который отображает страницу в magento, вы увидите весь xml, который он должен отобразить.

Я не прикасался к magento более 2 лет, но управлять сайтом с трафиком было кошмаром, поэтому моя компания в то время создала собственное программное обеспечение.

Обычно рекомендуется придерживаться правила 2x: 1 ядро ​​= 2 ГБ ОЗУ, 2 ядра = 4 ГБ ОЗУ, 4 ядра = 8 ГБ ОЗУ. Да, вы сказали, что подкачка не использовалась, но возможно увеличение ОЗУ - вариант. Совет: Для отслеживания истории загрузки процессора и памяти (не только текущей) я рекомендую использовать расширение Performance Monitoring от PotatoCommerce.

Вы должны выяснить, ждете ли вы Magento, базы данных или любой подсистемы между ними. Чтобы определить это, запустите strace на вашем веб-сервере / процессах php с флагом -ttt. Каждому системному вызову будет предшествовать микросекундная временная метка, так что вы сможете увидеть, как долго ваш PHP-процесс ожидает DB, поиска DNS и, возможно, других системных вызовов.

Мое первое предложение - запустить скрипт MySQL tuning-primer.sh, чтобы убедиться, что ваша конфигурация MySQL имеет правильную базовую конфигурацию.

Выяснение вашей проблемы с APC, чтобы вы могли использовать его, также будет хорошим расходом вашего времени. Даже всего лишь 32-Мбайт SHM для APC принесут радикальные улучшения.

Вы провели базовую оптимизацию Apache и PHP, то есть удалили ненужные / ненужные модули? Используете ли вы Apache prefork с mod_php или рабочий Apache с php-fpm?

Другие вопросы по тегам