Ответ 1
APC вычисляет процент фрагментации, используя следующую формулу:
(total_size_of_free_blocks_lt_5M / total_size_of_all_free_blocks) * 100
* Обратите внимание, что он считает только фрагменты размером менее 5M как фрагментированные.
Я переведу ваш конкретный случай на простой английский:
Фрагментация: 100,00% (280,0 Мбайт из 280,0 Мбайт в фрагментах 24740)
Это означает, что из 280M ваших свободных блоков все они меньше 5M. Если вы разделите свое свободное пространство на количество фрагментов, вы увидите, что это соответствует среднему размеру фрагмента ~ 11,6K.
Это означает, что если вы попытаетесь сохранить элемент, который больше всех доступных блоков, он не будет соответствовать, и произойдет одна из двух вещей, основанная на apc.user_ttl
настройка конфигурации. Если TTL установлен в 0, то весь ваш кеш пользователя очищается и элемент вставлен. Если TTL установлен больше 0, то он будет вычеркнуть истекшие записи и вставить элемент. В обоих случаях общее количество кеша увеличивается. Наличие этого приращения в той мере, в какой оно есть в вашем случае, является индикатором того, что вы можете делать это неправильно.
Вот простая визуализация того, что фрагментация делает с вашим кешем с течением времени. Он представляет собой простой размер байтового 32 байта, каждый блок равен 1B.
[--------------------------------] (starts empty) [A-------------------------------] (1B stored) [ABB-----------------------------] (2B stored) [ABBCCCC-------------------------] (4B stored) ... (time elapses) [A--CCCC-EEE--GGGGGG-III--KKKLLLL]
Итак, теперь, если вы хотите сохранить элемент M
, размер которого равен 4B, вы не можете, поскольку самый большой доступный блок - 2B. Это инициирует инкремент счетчика полного кеша и полный или частичный сброс на основе user_ttl, подробно описанный выше.
Теперь вопрос: это плохо в вашем случае?
Я думаю, что это возможно. 100% -ная фрагментация кэша сама по себе не плоха. Это не редкость видеть, что на любом рабочем сервере работает. Однако, чтобы увидеть это на 100% с таким большим количеством свободного места, это признак того, что что-то может быть неправильным.
- Вы можете слишком много кэшировать; просто потому, что кеш там не означает, что вы должны засунуть в него все.
- Вы можете кэшировать слишком короткий TTL (для записи), низкие TTL означают, что незаблокированные блоки освобождаются чаще.
- Также возможно, что у вас есть несколько действительно больших предметов, которые вы пытаетесь сохранить. При 100% -ной фрагментации он гарантировал, что любой элемент >= 5М не будет соответствовать. Если ваш средний свободный размер блока составляет 11,6 тыс., То, скорее всего, данный элемент не поместится, так как размер его увеличивается до 11,6 тыс..
Возможно, вам захочется попробовать сортировать кеш пользователя по размеру и посмотреть, что такое ваши самые большие записи, и каковы их TTL. Может быть, они могут быть увеличены?
Невозможно дать точный диагноз, не имея локтей глубоко в ваших приложениях и шаблонах использования, но вся эта информация должна установить вас на правильном пути. Вполне возможно, что это не проблема, и вы можете просто позволить APC сделать это спокойно.