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.
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. |
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.
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.
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.