Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Aunque la configuración predeterminada de APC está bien para la mayoría de las instalaciones, los usuarios dedicados deberían considerar ajustar los siguientes parámetros.

Hay dos decisiones principales a tomar para configurar APC. Primero, cuánta memoria va a ser asignada a APC; y segundo, si APC debe comprobar si un archivo ha sido modificado en cada petición. Las dos directivas ini que controlan estos ajustes son apc.shm_size y apc.stat, respectivamente. Lea detenidamente las secciones sobre estas dos directivas más abajo.

Una vez que el servidor está ejecutándose, el script apc.php que está incluido con la extensión debería ser copiado a algún lugar dentro del directorio raíz de documentos y visualizarlo con un navegador, ya que porporciona un análisis detallado del funcionamiento interno de APC. Si GD está habilitado en PHP, también mostrará algunos gráficos interesantes. Lo primero que se debe asegurar es, por supuesto, que se están manejando realmente archivos en caché. Si APC está funcionando, el número dado por Cache full count (a la izquierda) mostrará el número de veces que la caché ha alcanzado su máxima capacidad y ha tenido que limpiar forzosamente cualquier entrada a la que no se haya accedido en los últimos apc.ttl segundos. Este número está minimizado en una caché bien configurada. Si la caché está siendo llenada constantemente, y de este modo liberada forzosamente, el revoltijo resultante tendrá efectos negativos en el rendimiento del script. La forma más sencilla de minimizar este número es asignar más memoria a APC. A menos que se haga esto, debería usarse apc.filters para almacenar en caché menos scripts.

Cuando APC es compilado con soporte para mmap (Memory Mapping - Mapeo de Memoria), sólo usará u segmento de memoria, a diferencia de cuando APC es construido con soporte para SHM (SysV Shared Memory - Memoria Compartida de SysV), que usa múltiples segmentos de memoria. MMAP no tiene un límite máximo como lo tiene SHM en /proc/sys/kernel/shmmax. En general, se recomienda el soporte para MMAP ya que reclamará la memoria más rápido cuando el servidor web sea reiniciado y a fin de cuentas reduce el impacto de asignacion de memoria al inicio.

Opciones de configuración de APC
Nombre Por defecto Cambiable Historial de cambios
apc.enabled "1" PHP_INI_SYSTEM PHP_INI_SYSTEM en APC 2. PHP_INI_ALL en APC <= 3.0.12.
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "32M" PHP_INI_SYSTEM  
apc.shm_strings_buffer "4M" PHP_INI_SYSTEM Disponible a partir de APC 3.1.4.
apc.optimization "0" PHP_INI_ALL PHP_INI_SYSTEM en APC 2. Eliminada en APC 3.0.13.
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.ttl "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.user_ttl "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0.
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL PHP_INI_SYSTEM en APC <= 3.0.12. Disponible a partir de APC 3.0.0.
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.0. Anterior a APC 3.1.4, el valor por defecto era "0" (deshabilitado).
apc.file_update_protection "2" PHP_INI_SYSTEM Disponible a partir de APC 3.0.6.
apc.enable_cli "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.7.
apc.max_file_size "1M" PHP_INI_SYSTEM Disponible a partir de APC 3.0.7.
apc.use_request_time "1" PHP_INI_ALL Disponible a partir de APC 3.1.3.
apc.stat "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.10.
apc.write_lock "1" PHP_INI_SYSTEM Disponible a partir de APC 3.0.11.
apc.report_autofilter "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.11.
apc.serializer "default" PHP_INI_SYSTEM Disponible desde APC 3.1.0.
apc.include_once_override "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.12.
apc.rfc1867 "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.13.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM  
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM  
apc.rfc1867_freq "0" PHP_INI_SYSTEM  
apc.rfc1867_ttl "3600" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.localcache "0" PHP_INI_SYSTEM Disponible en APC 3.0.14 - 3.1.11.
apc.localcache.size "512" PHP_INI_SYSTEM Disponible en APC 3.0.14 - 3.1.11.
apc.coredump_unmap "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.16.
apc.stat_ctime "0" PHP_INI_SYSTEM Disponible a partir de APC 3.0.13.
apc.preload_path NULL PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.file_md5 "0" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.canonicalize "1" PHP_INI_SYSTEM Disponible a partir de APC 3.1.1.
apc.lazy_functions 0 PHP_INI_SYSTEM Disponible a partir de APC 3.1.3.
apc.lazy_classes 0 PHP_INI_SYSTEM Disponible a partir de APC 3.1.3.
Para más detalles y definiciones de los modos de PHP_INI_*, vea Dónde se puede realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

apc.enabled boolean

apc.enabled se puede establecer a 0 para deshabilitar APC. Esto es útil principalmente cuando APC está compilado estáticamente en PHP, ya que no hay otra forma de deshabilitarlo (cuando se compila como un DSO, la línea extension en php.ini debe ser descomentada).

apc.shm_segments integer

El número de segmentos de memoria compartida a asignar a la caché del compilador. Si APC está agotando la memoria compartida pero apc.shm_size está establecido tan alto como el sistema lo permita, aumentar este valor podría prevenir que APC agote su propia memoria.

apc.shm_size integer

El tamaño de cada segmento de memoria compartida en MB. Por defecto, algunos sistemas (incluidos la mayoría de variantes de BSD) tienen límites muy bajos del tamaño de un segmento de memoria compartida.

apc.shm_strings_buffer string

El tamaño de la memoria a usar como búfer compartido para strings usados internamente por APC. El tamaño debería sufijarse con M para megabytes, G para gigabytes. LA habilitación de esta opción reduce la cantidad de memoria usada por el trabajador PHP-FPM ya que los strings serán almacenados una vez en lugar de una por cada trabajador.

apc.optimization integer

El nivel de optimización. Cero deshabilita el optimizador, y valores mayores usan optimizaciones más agresivas. Se esperan mejoras de velocidad muy modestas. Esto es experimental.

apc.num_files_hint integer

Un "consejo" sobre el número de distintos archivos fuente que serán incluidos o solicitados en su servidor web. Establézcalo a cero u omítalo si no está seguro; este ajuste es útil principalmente para sitios que tienen miles de archivos fuente.

apc.user_entries_hint integer

Al igual que apc.num_files_hint, un "consejo" sobre el número de distintas variables de caché de usuario a almacenar. Estblézcalo a cero u omítalo si no está seguro.

apc.ttl integer

El número de segundos que se le permite a una entrada de caché estar parada en una ranura en caso de que esta ranura de entrada de caché sea necesaria para otra entrada. Dejar esto a cero significa que la caché de APC podría llenarse potencialmente de entradas antiguas mientras que las nuevas entradas podrían no ser almacenadas en caché. En el caso de que una caché agote la memoria disponible, la caché será expurgada completamente si ttl es igual a 0. De otro modo, si ttl es mayor que 0, APC intentará eliminar las entradas caducadas.

apc.user_ttl integer

El número de segundos que se le permite a una entrada de caché estar parada en una ranura en caso de que esta ranura de entrada de caché sea necesaria para otra entrada. Dejar esto a cero significa que la caché de APC podría llenarse potencialmente de entradas antiguas mientras que las nuevas entradas podrían no ser almacenadas en caché. En el caso de que una caché agote la memoria disponible, la caché será expurgada completamente si ttl es igual a 0. De otro modo, si ttl es mayor que 0, APC intentará eliminar las entradas caducadas.

apc.gc_ttl integer

El número de segundos que una entrada de caché puede permanecer en la lista de recolección de basura. Este valor proporciona un seguro en el caso de que un proceso del servidor muera mientras se ejecuta un archivo fuente en caché; si este archivo fuente es modificado, la memoria asignada para la versión antigua no será reclamada hasta que se alcance este TTL. Estabézcalo a cero para deshabilitar esta característica.

apc.cache_by_default boolean

Activado por defecto, pero se puede desactivar y usarlo junto con un filtro positivo en apc.filters para que sólo sean almacenados en caché los archivos que coincidan con un filtro positivo.

apc.filters string

Una lista de expresiones regulares POSIX extendido separadas por comas. Si cualquier patrón coincide con el nombre de archivo fuente, el archivo no será almacenado en caché. Observe que el nombre de archivo usado para la comparación es pasado para incluirlo/requerirlo, no la ruta absoluta. Si el primer carácter de una expresión es +, la expresión será aditiva en el sentido de que cualquier archivo comparado por la expresión será almacenado en caché, y si el primer carácter es -, entonces cualquier cosa que coincida no será almacenada en caché. El caso predeterminado es -, por lo que se puede dejar así.

apc.mmap_file_mask string

Si se compiló con soporte para MMAP usando --enable-mmap, ésta es la máscara de archivo estilo mktemp a pasar al módulo mmap para determinar si la región de memoria de mmap va a ser para gestión de archivos o para gestión de memoria compartida. Para gestión directa de archivos, establézcalo a algo como /tmp/apc.XXXXXX (exactamente 6 X). Para usar shm_open/mmap al estilo POSIX ponga .shm en algún lugar de su máscara, p.ej. /apc.shm.XXXXXX También se puede establecer a /dev/zero para usar la interfaz /dev/zero de kernel a una memoria de mmap anónima. Dejándolo indefinido forzará un mmap anónimo.

apc.slam_defense integer

En servidores muy concurridos cuando se inicia el sercidor o se modifican archivos, se puede crear una competición para todos los procesos que intentén almacenar el mismo archivo al mismo tiempo. Esta opción establece el porcentaje de procesos que se saltan el intentar almacenar en caché un archivo que no lo esté. O piense en ello como la probabilidad de saltarse el almacenamiento en caché de un proceso. Por ejemplo, establecer apc.slam_defense a 75 siginifica que hay un 75% de probabilidad de que el proceso no almacene en caché un archivo que no lo está. Así, cuanto mayor sea el valor mayor será la defensa contra los ataques a la caché. Establecer esto a 0 deshabilita esta característica.

Obsoleto por apc.write_lock.

apc.file_update_protection integer

Cuando un archivo es modificado en un servidor web debería hacerse realmente de una forma atómica. Es decir, escribir en un archivo temporal y renombrar (mv) el archivo a su posición permanente cuando esté listo. Muchos editores de texto, Many text editors, cp, tar y otros programas similares no lo hacen. Esto significa que hay una posibilidad de que se acceda al archivo (y se almacene en caché) mientras está todavía siendo escrito. apc.file_update_protection pone un retardo en la marca de almacenamiento en caché de nuevos archivos. Lo predeterminado es 2 segundos, lo que significa qeu si marca de tiempo de modificación (mtime) de un archivo muestra que es menor que 2 segundo de atigüedad cuando se acceda a él, no será almacenado en caché. La persona desafortunada que acceda a este archivo a medio escribir aún lo verá de forma extraña, pero por lo menos no persistirá. Si todos los archivos del servidor web se actualizan atómicamente mediante algún método como rsync (el cuál actuliza correctamente), se puede deshabilitar esta protección estableciendo esta directiva a 0. Si el sistema se inunda de entradas/salidas y algunos procesos de actualización toman más de 2 segundos, este ajuste debería ser aumentado para habilitar la protección en las operaciones de actualizacón más lentas.

apc.enable_cli integer

Mayormente para probar y depurar. Estableciendo esto habilita APC para la versión CLI de PHP. Bajo circunstancias normales, no es ideal crear, llenar y destruir la caché de APC en cada petición CLI, pero para varios escenarios de pruebas es útil para ser capaz de habilitar APC para la versión CLI de PHP de manera sencilla.

apc.max_file_size integer

Previene que los archivos más grandes que este valor sean almacenados en caché. Por defecto es 1M.

apc.stat integer

Tenga cuidado al cambiar este ajuste. Por defecto está activado, forzando a APC a realizar estadísticas (comprobar) del script en cada petición para determinar si ha sido modificado. Si ha sido modificado será recompilado y se almacenará en caché la nueva versión. Si este ajuste está desactivado, APC no hará ninguna comprobación, lo que normalmente significa que al forzar a APC a recomprobar archivos, el sevidor web tendrá que ser reiniciado o la caché tendrá que ser limpiada manualmente. Observe que la configuración de FastCGI del servidor web puede no limpiar la caché al reinicio. En un servidor de producción donde los archivos de script raramente cambian, se puede lograr aumentar el redimiento significativamente deshabilitando las estadísticas.

Para archivos incluidos/requeridos también se aplica esta opción, pero observe que para inclusiones de rutras relativas (cualquier ruta que no empiece con / en Unix), APC tiene que realizar una verificación para identificar de manera única un arcivo. Si se usan inclusiones de rutas absolutas, APC puede saltarse las estadísticas y usar esa ruta absoluta como el identificador único del archivo.

apc.write_lock boolean

En servidores concurridos, cuando el servidor se inicia primero, o cuando muchos archivos han sido modificados al mismo tiempo, APC puede intentar compilar y almacenar en caché el mismo archivo múltiples veces. Write_lock garantiza que sólo un proceso intentará compilar y almacenar en caché un script que no lo ésta. Los demás procesos que intenten usar el script se ejecutarán sin usar la caché de código de operaciones, en vez de mirar y esperar a que la caché se prepare.

apc.report_autofilter boolean

Registra cualquier script que fue automáticamente excluído de ser almacenado en caché debido a cuestiones de enlaces precoces/tardíos.

apc.serializer string

Usado para configurar APC para que use un serializador de terceros.

apc.include_once_override boolean

Optimiza las llamadas a include_once y require_once y evita las caras llamadas al sistema utilizadas.

Advertencia

Esta característica es EXPERIMENTAL. El comportamiento de esta directiva, su nombre, y la documentación pertinente puede cambiar sin previo aviso en una versión futura de APC. El uso de esta característica está bajo su responsabilidad.

apc.rfc1867 boolean

El gestor de enganche de Progreso de Subidas de Archivo RFC1867 sólo está disponible si APC fue compilado con PHP 5.2.0 o posterior. Cuando está habilitado, cualquier subida de archivo que incluya un campo llamado APC_UPLOAD_PROGRESS antes del campo file en un formulario de subidas hará que APC cree automáticamente una entrada de caché de usuario upload_key donde key es el valor de la entrada APC_UPLOAD_PROGRESS del formulario.

Observe que el campo oculto especificado por APC_UPLOAD_PROGRESS debe ir antes del campo file, si no el progreso de subida no funcionará correctamente.

Observe que el rastreo de subidas de archivos no es seguro a nivel de hilos en este momento, por lo que las nuevas subidas que ocurran mientras se está realizando una anterior deshabilitará el rastreo para la anterior.

Observe que rate sólo está disponible una vez que todas las tranferencias de ficheros estén completadas.

Ejemplo #1 Un ejemplo de apc.rfc1867

<?php
print_r
(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>

El resultado del ejemplo sería algo similar a:

Array
(
    [total] => 1142543
    [current] => 1142543
    [rate] => 1828068.8
    [filename] => test
    [name] => file
    [temp_filename] => /tmp/php8F
    [cancel_upload] => 0
    [done] => 1
)

apc.rfc1867_prefix string

El prefijo de clave a usar para la entrada de caché de usuario generada por la funcionalidad de progreso de subida rfc1867.

apc.rfc1867_name string

Especifica el nombre de la entrada oculta del formulario que activa el progreso de subida de APC y especifica el sufijo de clave de la caché de usuario.

apc.rfc1867_freq string

La frecuencia con la que se debería hacer la actualización de la entrada de la caché de usuario para el progreso de subida. Puede tomar la forma de un porcentaje del total del tamaño del archivo o un tamaño en bytes opcionalmente con el sufijo "k", "m", o "g" para kilobytes, megabytes, o gigabytes respectivamente (insensible a mayúsculas-minúsculas). Un valor de 0 actualiza tan a menudo como se pueda, lo que puede causar subidar más lentas.

apc.rfc1867_ttl integer

TTL para las entradas de rfc1867.

apc.localcache boolean

Habilita un cierre libre de la caché de seguimiento de procesos locales que reduce las disputas de cierre cuando la caché está siendo escrita.

apc.localcache.size integer

El tamaño de la caché de seguimiento de procesos locales, debería ser establecido a un valor suficientemente grande, aproximadamente la mitad de apc.num_files_hint.

apc.coredump_unmap boolean

Habilita a APC para el manejo de señales, como SIGSEGV, que escriben archivos de núcleo cuando se indican. Cuando estas señales son recibidas, APC intentará desmapear el segmento de memoria compartida para excluirlo del archivo de núcleo. Este ajuste puede mejorar la estabilidad del sistema cuando son recibidas señales fatales y se configura un segmento grande de memoria compartida de APC.

Advertencia

Esta característica es potencialmente peligrosa. Desmapear el segmento de memoria compartida en un gestro de señal fatal puede causar un comportamiento indefinido si ocurriera un error fatal.

Nota:

Aunque algunos kernels pueden proporcionar una utilidad para ignorar varios tipos de memoria compartida cuando se genera un archivo de copia de núcleo, estas implementaciones pueden también ignorar segmentos de memoria compartida tales como el marcador de Apache.

apc.stat_ctime integer

La verificación con ctime evitará problemas causados por programas como svn o rsync asegurándose que los i-nodos no han cambiado desde la úlima estadística. APC normalmente sólo verificará mtime.

apc.canonicalize bool

Si está activado, las rutas relativas son canonizadas al modo sin estadísticas. En tal caso, los ficheros importados a partir de envolturas de flujos, no se almacerán dado que realpath() no soporta las envolutras de flujos.

apc.preload_path string

Opcionalmente, establece un ruta al directorio que APC cargará cados de caché al inicio.

apc.use_request_time bool

Usa el tiempo de inicio de la petición SAPI para TTL.

apc.file_md5 bool

Graba un hash de archivos md5.

apc.lazy_functions integer

Habilita la carga lenta de funciones.

apc.lazy_classes integer

Habilita la carga lenta de clases.