Я играл с этим довольно долго, но я немного потерял, что делать. Я использую APC 3.1.3p1 для CentOs 5 с PHP 5.2.5. APC действует как кеш операционного кода, так и пользовательский кеш. В основном этот сервер запускает сайты Drupal 6, используя модуль CacheRouter для поддержки кеша APC. Я некоторое время запускал APC 3.0.19, но это заставляло Apache иногда блокироваться (документированная ошибка в этой версии APC), поэтому почему я на 3.1.3p1.
Я настроил APC на 512 Мбайт памяти (mmap).
Симптомы немного прерывисты, но, начиная с пустого кеша, это обычно то, что я вижу:
-
Пользовательский кеш заполняется довольно медленно. Несмотря на начальную скорость вставки примерно 20 000 вставок в секунду, кеш пользователя будет сообщать только несколько сотен, а затем несколько тысяч записей и будет расти очень медленно. Я могу, возможно, указать это на write_locking, но просто хочу упомянуть об этом, если это имеет важное значение для решения проблемы. Через несколько часов он достигает равновесия около 30 тыс. Записей.
-
Фрагментация начинается рано и быстро растет. В течение примерно 10 часов или около того я обычно на 100% фрагментации.
-
Общий объем использования кэша (opcode + user) стабилизируется примерно на 240 Мбайт или около того. Это практически никогда не будет превышать этот уровень. Через день или около того я начну видеть увеличение кеша кэша пользовательского кэша (UCCFC).
На момент написания этой статьи мой UCCFC находился на уровне 62358 и увеличивался, несмотря на то, что APC сообщал 280MB бесплатно. У меня есть user_ttl из 7200, но я также играл с настройкой на 0 или другие суммы, и это мало влияет на проблему.
Я подозреваю, что проблема имеет какое-то отношение к фрагментации. Сейчас мой сервер сообщает "Фрагментация: 100,00% (280,0 Мбайт из 280,0 Мбайт в фрагментах 24740)" и 280 МБ, так бывает, что это количество свободного пространства, которое сообщает APC; я думаю, совпадение. К сожалению, я нашел в документах или в других местах очень мало информации, чтобы указать, что именно означает "фрагментация" в мире APC, и, по-видимому, вы практически ничего не можете сделать, чтобы избежать этого.
Может ли кто-нибудь пролить свет на эту проблему?