У меня было приложение PHP, которое плохо работало. Я исследовал ситуацию и определил, что кеш APC будет постоянно заполняться. Я увеличил размер кеша apc, так что я не получаю никаких событий полного кеша, а приложение работает нормально.
Тем не мение...
Меня беспокоил тот факт, что этому приложению нужно было выделить столько памяти для apc. У меня есть другие приложения, которые очень похожи, и они отлично работают с настройкой по умолчанию 64M. (Мне пришлось подняться до 400 МБ, чтобы это приложение работало правильно)
Итак, я копнул глубже, используя apc.php, и увидел кое-что очень странное. Два разных приложения, использующие одну и ту же общую библиотеку, сообщали о совершенно разных показателях использования памяти для кеша apc ...
из приложения, в котором нет проблемы
Имя файла: tessituraLoginEx2.php Размер: 16592
И приложение, использующее всю дополнительную оперативную память
Имя файла: tessituraLoginEx2.php Размер: 2717488
Два разных приложения, оба используют одну и ту же общую библиотеку, приложение A использует 16 КБ ОЗУ для файла, а приложение B использует 2,7 МБ для одного и того же файла.
Кто-нибудь знает, почему приложения A и B будут использовать такие разительно разные размеры для одного и того же файла?
Дополнительная информация
Мне удалось обойти проблему, изменив способ включения проблемных файлов в проект. Оба проекта используют фреймворк, вызывая вспомогательный метод, который в конечном итоге выполняет require_once соответствующих файлов из соответствующего каталога.
Я изменил приложение, чтобы явно выполнять require_once без использования фреймворка, и использование раздутого apc ram исчезло. По-прежнему не понимаю, почему у apc возникает эта проблема, когда требование происходит более сложным / динамичным образом. К счастью, у нас больше нет необходимости в этой сложной логике, обернутой вокруг require_once, поэтому этот обходной путь позволит мне вернуться к разумному распределению памяти для apc.
И чтобы уточнить ... Оба приложения использовали одну и ту же сложную логику для выполнения require_once, но только одно имеет проблему с раздуванием.