Как настроить APC для многих сайтов?

#php #apc

#php #apc

Вопрос:

Мы запускаем много сайтов на одной машине с apc.shm = 4G . Этого недостаточно для кэширования всего, поэтому мы настроили apc.ttl= 600 так, чтобы неиспользуемые записи удалялись. Неясно, работает ли это так, как планировалось. Мы видим хорошую скорость попадания в кэш ~ 91%, но 100% фрагментация происходит очень быстро.

Мы также начали видеть, что PHP перестает отвечать на запросы, что требует перезапуска Apache, но в логах PHP или Apache ничего не регистрируется. Apache все еще может обслуживать статические файлы без проблем в течение этого времени. Моя интуиция подсказывает мне, что это каким-то образом связано с оттоком в APC. Вот текущие настройки:

 apc.cache_by_default    1
apc.canonicalize    0
apc.coredump_unmap  0
apc.enable_cli  0
apc.enabled 1
apc.file_md5    0
apc.file_update_protection  2
apc.filters 
apc.gc_ttl  3600
apc.include_once_override   0
apc.lazy_classes    0
apc.lazy_functions  0
apc.max_file_size   1M
apc.mmap_file_mask  /dev/zero
apc.num_files_hint  1024
apc.preload_path    
apc.report_autofilter   0
apc.rfc1867 0
apc.rfc1867_freq    0
apc.rfc1867_name    APC_UPLOAD_PROGRESS
apc.rfc1867_prefix  upload_
apc.rfc1867_ttl 3600
apc.serializer  default
apc.shm_segments    1
apc.shm_size    4G
apc.slam_defense    1
apc.stat    1
apc.stat_ctime  0
apc.ttl 600
apc.use_request_time    1
apc.user_entries_hint   4096
apc.user_ttl    7200
apc.write_lock  1
 

Пара вопросов:

  1. Мы модифицировали apc.ttl , но не изменили apc.gc_ttl одновременно. Поможет ли снижение этого значения более быстрой очистке файлов и уменьшению фрагментации?
  2. Не лучше ли нам уйти apc.ttl = 0 и позволить APC опустошать и перестраивать каждый раз, когда кэш заполняется?

Заранее спасибо!

Ответ №1:

 apc.num_files_hint  1024
 

эта директива сообщает apc, сколько php-файлов ему, вероятно, придется хранить в своем кэше.

  • он используется в качестве хэш-ключа, поэтому рекомендуется сделать его простым числом
  • этого явно недостаточно, если вам действительно нужно кэшировать 4 ГБ файлов php! (общий хостинг, я думаю)

поэтому, пожалуйста, начните с того, что поставьте здесь цифру побольше, например, простое число, немного большее этого значения :

 find /var/www -type f -name "*.php" |wc -l
 

Возможно, у вас есть шанс понять, что происходит, упорядочив процесс apache, который обрабатывает ваши php-скрипты, когда apache перестает отвечать, используя

 strace -tt -o output.txt <pid of apache>
 

найдите pid с помощью страницы состояния сервера.

Комментарии:

1. Правильно, много сайтов Drupal на одном компьютере, так что это своего рода «общий хостинг». Я постараюсь увеличить это значение. Спасибо.