В настоящее время у меня проблемы с сервером, на котором запущен 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 и довольно много команд, но мой опыт управления сервером ограничен.
Когда вы отключаете кеширование, Magento работает ужасно медленно ... тем более на vps, так как он должен анализировать тонны файлов XML. То, как он отображает страницу, позволяет очень легко добавлять новые элементы по всей странице, но также требует некоторых массивных запросов sql, а также загрузки файлов xml.
Таким образом, отключение кеширования означает, что magento должен читать эти XML-файлы при каждом поступающем запросе. Таким образом, теперь каждый процесс конкурирует за процессор и дисковый ввод-вывод. На диске vps ввод-вывод - это то место, где ваше бутылочное горлышко будет 90% времени. Итак, 4 параллельных процесса запрашивают чтение большого количества XML-файлов, что приводит к длительному ожиданию ЦП процессами apache.
если вы сделаете strace
в одном из процессов apache, когда он отображает страницу в magento, вы увидите весь XML, который он должен отобразить.
Я не касался magento более двух лет, но запускать сайт с трафиком было кошмаром, поэтому моя компания в то время закончила создание собственного программного обеспечения.
Как правило, рекомендуется следовать правилу 2x: 1 ядро = 2 ГБ ОЗУ, 2 ядра = 4 ГБ ОЗУ, 4 ядра = 8 ГБ ОЗУ. Да, вы сказали, что своп не использовался, но, возможно, увеличение ОЗУ - это вариант. Совет: для отслеживания истории загрузки процессора и памяти (а не только текущей) я рекомендую использовать расширение Performance Monitoring от PotatoCommerce.
Вы должны выяснить, ждете ли вы Magento, базу данных или любую промежуточную подсистему. Чтобы определить это, запустите strace на вашем веб-сервере / процессах php с флагом -ttt. Каждый системный вызов будет иметь префикс с микросекундной меткой времени, поэтому вы сможете увидеть, как долго ваш PHP-процесс ожидает БД, поиск DNS и, возможно, другие системные вызовы.
Мое первое предложение - запустить MySQL tuning-primer.sh script, чтобы убедиться, что ваша конфигурация MySQL имеет правильную базовую конфигурацию.
Выяснение проблемы с APC, чтобы вы могли ее использовать, также будет хорошей потерей вашего времени. Даже всего 32 МБ SHM для APC будет кардинальным улучшением.
Вы сделали базовую оптимизацию Apache и PHP, т.е. удалили ненужные / ненужные модули? Вы используете предварительный форк Apache с mod_php или рабочий Apache с php-fpm?