Zend_Cache unserialize - боров памяти?
Я настроил Zend_Db_Table_Abstract, чтобы он использовал кеш метаданных, а затем профилировал его с помощью xhprof, чтобы посмотреть, сколько памяти он использует.
Оказывается, 34 вызова из _setupMetadata в Zend_Cache_Core::load занимают 7 МБ памяти, большая часть которой используется при вызове unserialize.
Конфигурация для кэша метаданных:
resources.cachemanager.db_metadata.frontend.name = Core
resources.cachemanager.db_metadata.frontend.options.automatic_serialization = true
resources.cachemanager.db_metadata.frontend.options.lifetime = null
resources.cachemanager.db_metadata.backend.name = File
resources.cachemanager.db_metadata.backend.options.cache_dir = APPLICATION_PATH "/../data/cache/db_metadata"
Это общая проблема, или я что-то упустил?
1 ответ
Поскольку вы сериализуете объект, это занимает много памяти. Особенно объект Zend_Db_*.
Здесь мы столкнулись с той же проблемой, и в итоге мы создали собственную кеш-систему.
Что вы можете сделать, так это определить режим сна / пробуждения, чтобы вы удалили весь ненужный ivar из Zend_Db_Table_Row_Abstract, но вы должны убедиться, что не нарушаете инвариант класса.
Удачи.:)