Доброго времени суток всем!
Проводил эксперименты с Magento и обнаружил довольно-таки странную особенность.
У меня VPS, гиг памяти. Решил посмотреть в чем же причина подтормаживания данного скрипта и обнаружил, что нагрузка на проц Апачем и Мускулом осуществляется как-то неравномерно. То есть при отправке запроса Апач слегка возбуждается (это понятно, должен же он его прочитать), после чего система замирает где-то на секунду, потом, практически одновременно возбуждается Мускуль и Апач (то же понятно, запросы к БД, отработка скриптов ПХП, два ядра, работают практически параллельно), приходит ответ.
Сначала грешил на IO, у VPS по определению жеский диск - слабое место, перекинул все в память (на диск в памяти), т.е. действительно все, и папку с Magento и всю БД. Вроде никаких проблем c IO быть не должно, так нет, принимает запрос, ждет секунду, формирует и выдает ответ.
Сайты на других скриптах ведут себя нормально, т.е. никаких странных задержек не наблюдается.
Отсюда вопрос, где потерянная секунда? И как это возможно?
Да, и еще, данная особенность замечена только при работе frontend. В админке все работает как надо.
Magento: настройка производительности
#2
ArtArtArt
18.05.2010 11:34
Вроде разобрался.
Это происходит из-за того, что при каждом запросе страницы скрипт загружается и компилится. (После Java как-то непривычно, расход ресурсов-то какой!) Magento обладает большим количеством файлов, плюс Zend Framework, в итоге получается Монстра
Это происходит из-за того, что при каждом запросе страницы скрипт загружается и компилится. (После Java как-то непривычно, расход ресурсов-то какой!) Magento обладает большим количеством файлов, плюс Zend Framework, в итоге получается Монстра
18.05.2010 22:39
Имеется возможность установить компилятор кода PHP, причем для крупных систем вроде Magento это настоятельно рекомендуется.
#4
ArtArtArt
19.05.2010 12:30
Компилятор или кэшер байт-кода?
Если компилятор, то это очень интересно, расскажит подробнее, пожалуйста!
Если компилятор, то это очень интересно, расскажит подробнее, пожалуйста!
19.05.2010 16:08
ArtArtArt (18.05.2010 11:34) писал:
Вроде разобрался.
Это происходит из-за того, что при каждом запросе страницы скрипт загружается и компилится. (После Java как-то непривычно, расход ресурсов-то какой!) Magento обладает большим количеством файлов, плюс Zend Framework, в итоге получается Монстра
Это происходит из-за того, что при каждом запросе страницы скрипт загружается и компилится. (После Java как-то непривычно, расход ресурсов-то какой!) Magento обладает большим количеством файлов, плюс Zend Framework, в итоге получается Монстра
Ну как, удалось решить проблему с задержкой? Помог кэшер байт-кода?
#7
ArtArtArt
20.05.2010 12:01
Пока не очень.
Проблема в следующем:
У меня VPS, соответственно самое узкое место - дисковая подсистема.
Поставил APC, настроил, чтобы APC не проверял изменились ли файлы (apc.stat=0). При изменении скриптов просто перегружаем Апач, НО на диск эта зараза все-равно лезет, это заметно, когда происходит замедление обращения к дискам на сервере, замедляется и загрузка страниц.
Вопрос знатокам. Можно ли настроить APC так, чтобы обращения к диску не происходило вообще, если скрипт уже закеширован. Тогда, я думаю, прирост в скорости загрузки страниц будет существенным.
Проблема в следующем:
У меня VPS, соответственно самое узкое место - дисковая подсистема.
Поставил APC, настроил, чтобы APC не проверял изменились ли файлы (apc.stat=0). При изменении скриптов просто перегружаем Апач, НО на диск эта зараза все-равно лезет, это заметно, когда происходит замедление обращения к дискам на сервере, замедляется и загрузка страниц.
Вопрос знатокам. Можно ли настроить APC так, чтобы обращения к диску не происходило вообще, если скрипт уже закеширован. Тогда, я думаю, прирост в скорости загрузки страниц будет существенным.
#8
AraArtArt
20.05.2010 12:21
Вот описание настройки
apc.stat integer
Be careful if you change this setting. The default is for this to be On which means that APC will stat (check) the script on each request to see if it has been modified. If it has been modified it will recompile and cache the new version. If you turn this setting off, it will not check. That means that in order to have changes become active you need to restart your web server. On a production server where you rarely change the code, turning stats off can produce a significant performance boost.
For included/required files this option applies as well, but note that if you are using relative path includes (any path that doesn't start with / on Unix) APC has to check in order to uniquely identify the file. If you use absolute path includes APC can skip the stat and use that absolute path as the unique identifier for the file.
Во втором абзаце что-то говорится про абсолютные/относительные пути к файлам. Я не очень силен в PHP, пока. Может кто-то из специалистов поможет? Вопрос-то важный.
apc.stat integer
Be careful if you change this setting. The default is for this to be On which means that APC will stat (check) the script on each request to see if it has been modified. If it has been modified it will recompile and cache the new version. If you turn this setting off, it will not check. That means that in order to have changes become active you need to restart your web server. On a production server where you rarely change the code, turning stats off can produce a significant performance boost.
For included/required files this option applies as well, but note that if you are using relative path includes (any path that doesn't start with / on Unix) APC has to check in order to uniquely identify the file. If you use absolute path includes APC can skip the stat and use that absolute path as the unique identifier for the file.
Во втором абзаце что-то говорится про абсолютные/относительные пути к файлам. Я не очень силен в PHP, пока. Может кто-то из специалистов поможет? Вопрос-то важный.
#9
AraArtArt
20.05.2010 16:33
Эксперименты продолжаются
Добавил в файле Mage.php
После строки
$appRoot = dirname(__FILE__);
Следующее:
$appRoot = '/'.$appRoot;
Вроде эффект есть, на разгруженной машине заметно незначительное ускорение (выявляется только тестами), подожду ситуации, когда дисковая подсистема тормозить начнет, проверю.
А вообще для профессионалов соц. заказ есть Под названием "Ускоряем время отклика Magento".
Есть такой модуль Compilation у Magento в базе. Он собирает все основные файлы Magento в одном месте, вроде как ускорение.
Вот бы файлы из секции "default" слить в один и инклюдить уже его. Я думаю, подгрузка ускорится если не в 10, то в 5 раз точно. Жаль самому времени нет заняться (Да и знаний в общем-то, что важнее), на изучение вопроса уйдет где-то 3-4 рабочих дня.
Добавил в файле Mage.php
После строки
$appRoot = dirname(__FILE__);
Следующее:
$appRoot = '/'.$appRoot;
Вроде эффект есть, на разгруженной машине заметно незначительное ускорение (выявляется только тестами), подожду ситуации, когда дисковая подсистема тормозить начнет, проверю.
А вообще для профессионалов соц. заказ есть Под названием "Ускоряем время отклика Magento".
Есть такой модуль Compilation у Magento в базе. Он собирает все основные файлы Magento в одном месте, вроде как ускорение.
Вот бы файлы из секции "default" слить в один и инклюдить уже его. Я думаю, подгрузка ускорится если не в 10, то в 5 раз точно. Жаль самому времени нет заняться (Да и знаний в общем-то, что важнее), на изучение вопроса уйдет где-то 3-4 рабочих дня.
20.05.2010 18:36
Если посмотреть тесты этого блога http://www.magentoco...ver-benchmarks/ то из него выходит, что Magento довольно шустрая. Интересно, как они этого добились?
#11
AraArtArt
20.05.2010 18:49
Там отдельный сервак достаточно мощный, за счет этого все и летает.
Хотя я тестировал с Zend Server, работает действительно побыстрее. Только нелюблю я эти черные ящики, пусть и бесплатные...
Хотя я тестировал с Zend Server, работает действительно побыстрее. Только нелюблю я эти черные ящики, пусть и бесплатные...
#12
ArtArtArt
21.05.2010 18:06
AraArtArt (20.05.2010 16:33) писал:
Эксперименты продолжаются
Добавил в файле Mage.php
После строки
$appRoot = dirname(__FILE__);
Следующее:
$appRoot = '/'.$appRoot;
Вроде эффект есть, на разгруженной машине заметно незначительное ускорение (выявляется только тестами), подожду ситуации, когда дисковая подсистема тормозить начнет, проверю.
А вообще для профессионалов соц. заказ есть Под названием "Ускоряем время отклика Magento".
Есть такой модуль Compilation у Magento в базе. Он собирает все основные файлы Magento в одном месте, вроде как ускорение.
Вот бы файлы из секции "default" слить в один и инклюдить уже его. Я думаю, подгрузка ускорится если не в 10, то в 5 раз точно. Жаль самому времени нет заняться (Да и знаний в общем-то, что важнее), на изучение вопроса уйдет где-то 3-4 рабочих дня.
Добавил в файле Mage.php
После строки
$appRoot = dirname(__FILE__);
Следующее:
$appRoot = '/'.$appRoot;
Вроде эффект есть, на разгруженной машине заметно незначительное ускорение (выявляется только тестами), подожду ситуации, когда дисковая подсистема тормозить начнет, проверю.
А вообще для профессионалов соц. заказ есть Под названием "Ускоряем время отклика Magento".
Есть такой модуль Compilation у Magento в базе. Он собирает все основные файлы Magento в одном месте, вроде как ускорение.
Вот бы файлы из секции "default" слить в один и инклюдить уже его. Я думаю, подгрузка ускорится если не в 10, то в 5 раз точно. Жаль самому времени нет заняться (Да и знаний в общем-то, что важнее), на изучение вопроса уйдет где-то 3-4 рабочих дня.
Соц. заказ отменяется. Все уже придумали до нас. В модуле Compilation это уже происходит.
Только при использовании APC не надо включать APC как бкенд кэшер, происходит сильная фрагментция. Для сохранения сессий и кэша Мадженты лучше всего использовать tmpfs. (ИМХО).