Назад | Перейти на главную страницу

Вопросы по установке PHP APC

При установке PHP APC я получил два неожиданных вопроса. Я ранее устанавливал APC в тестовой среде и не получал этих вопросов.

Вопросы следующие:

Вот несколько начальных строк установки:

# pear install pecl/apc
WARNING: channel "pecl.php.net" has updated its protocols, use "channel-update pecl.php.net" to update
downloading APC-3.1.6.tgz ...
Starting to download APC-3.1.6.tgz (148,835 bytes)
..........................done: 148,835 bytes
49 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
 1. Enable per request file info about files used from the APC cache : no

1-1, 'all', 'abort', or Enter to continue: 
 1. Enable spin locks (EXPERIMENTAL) : no

1-1, 'all', 'abort', or Enter to continue: 
building in /var/tmp/pear-build-root/APC-3.1.6
running: /var/tmp/APC/configure --enable-apc-filehits=no --enable-apc-spinlocks=no

Кто-нибудь знает, что делают эти вопросы? Каковы были бы правильные ответы?

Короткий ответ: для параметров обычно можно оставить значения по умолчанию, которые можно принять за «правильные» ответы.

Первая опция (--enable-apc-filehits) включает сбор информации для опции "filehits" в apc_cache_info. По сути, вы можете использовать его, чтобы выяснить, какие файлы извлекаются из кеша для каждого запроса, если вы отлаживаете проблемы, связанные с кешем. Из apc_cache_info документация:

Если cache_type - filehits, будет возвращена информация о том, какие файлы были обслужены из кеша байт-кода для текущего запроса. Эта функция должна быть включена во время компиляции с помощью --enable-filehits.

Что касается второго варианта (--enable-apc-spinlocks), спин-блокировки - это неэффективный процессорный способ обеспечить доступ к ресурсу только одним процессом в любой момент времени. APC использует блокировки при работе с разделяемой памятью. APC размещает кеш в общей памяти, чтобы все процессы PHP могли совместно использовать кеш, и блокировки гарантируют, что процессы не спотыкаются друг о друге при этом.

Начиная с APC 3.1.9, установщик PECL запрашивает включение трех дополнительных опций: защиты памяти, блокировок чтения / записи pthread и мьютексов pthread, которые соответствуют параметрам --enable-apc-memprotect, --enable-apc-pthreadrwlocks и - включить-apc-pthreadmutex. Первые два помечены как экспериментальные и по умолчанию отключены; последний включен.

Защита памяти рассматривает некоторые области общей памяти как доступные только для чтения при определенных обстоятельствах.

Блокировки чтения / записи Pthread и мьютексы являются альтернативными механизмами блокировки. В настоящее время APC может использовать следующие механизмы блокировки:

  1. блокировка файлов (fcntl)
  2. семафоры
  3. замки pthread
  4. мьютексы pthread
  5. Тонкие замки для чтения / записи (Только Windows)
  6. спин-блокировки

Придерживайтесь механизма блокировки по умолчанию, если APC не скомпилируется. Брайан Шайр из Facebook протестировал Механизм блокировки производительности и представил результаты еще в 2007 году; вы можете использовать его результаты, чтобы помочь вам при попытках блокировки механизмов, когда значения по умолчанию не работают.

Вместо использования AB для тестов вы должны использовать осада что более точно.

вы уверены, что apc включен?

php -i | grep apc 

То, что он установлен, не означает, что он загружен в php.