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?