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