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, но вы должны убедиться, что не нарушаете инвариант класса.

Удачи.:)

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