{"id":15906,"date":"2025-12-08T18:23:46","date_gmt":"2025-12-08T17:23:46","guid":{"rendered":"https:\/\/webhosting.de\/php-opcache-konfiguration-performance-optimierung-cacheboost\/"},"modified":"2025-12-08T18:23:46","modified_gmt":"2025-12-08T17:23:46","slug":"php-opcache-configuracion-optimizacion-del-rendimiento-cacheboost","status":"publish","type":"post","link":"https:\/\/webhosting.de\/es\/php-opcache-konfiguration-performance-optimierung-cacheboost\/","title":{"rendered":"PHP OPcache explicado en profundidad: c\u00f3mo sacar el m\u00e1ximo partido a su cach\u00e9"},"content":{"rendered":"<p>PHP OPcache acelera mis scripts porque PHP utiliza el compilado <strong>c\u00f3digo de bytes<\/strong> en la memoria y as\u00ed ahorra el nuevo an\u00e1lisis. En esta gu\u00eda, muestro c\u00f3mo utilizo OPcache. <strong>configure<\/strong>, superviso y ajusto con precisi\u00f3n para que su aplicaci\u00f3n responda de forma notablemente m\u00e1s r\u00e1pida y absorba con tranquilidad los picos de carga.<\/p>\n\n<h2>Puntos centrales<\/h2>\n\n<ul>\n  <li><strong>Cach\u00e9 de c\u00f3digo byte<\/strong> Reduce la carga de la CPU y la E\/S.<\/li>\n  <li><strong>Par\u00e1metros<\/strong> C\u00f3mo seleccionar espec\u00edficamente memory_consumption y max_accelerated_files<\/li>\n  <li><strong>Alrededores<\/strong> Configuraci\u00f3n diferenciada: desarrollo, staging, producci\u00f3n<\/li>\n  <li><strong>Monitoreo<\/strong> Para utilizar la tasa de visitas, la ocupaci\u00f3n y los desalojos.<\/li>\n  <li><strong>Despliegue<\/strong> y sincronizar correctamente el vaciado de la cach\u00e9<\/li>\n<\/ul>\n\n<h2>As\u00ed funciona OPcache: c\u00f3digo byte en lugar de recompilaci\u00f3n<\/h2>\n\n<p>Con cada solicitud, PHP normalmente lee los archivos, analiza el c\u00f3digo y crea <strong>c\u00f3digo de bytes<\/strong>, que ejecuta el motor Zend. OPcache interviene precisamente aqu\u00ed y almacena este c\u00f3digo byte en la memoria compartida, de modo que las solicitudes posteriores se inician directamente desde la memoria. Esto reduce los ciclos de la CPU y los accesos a los archivos, lo que acorta notablemente los tiempos de respuesta. En configuraciones t\u00edpicas, consigo ganancias de entre el 30 y el 70 %, dependiendo de la base de c\u00f3digo y el perfil de tr\u00e1fico. Es fundamental que la cach\u00e9 sea lo suficientemente grande y que los scripts m\u00e1s importantes permanezcan permanentemente en el <strong>Memoria<\/strong> permanecer.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-opcache-workspace-7164.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Comprobar y activar OPcache en Linux, Windows y alojamiento compartido<\/h2>\n\n<p>Siempre empiezo echando un vistazo a phpinfo() y buscando \u201eZend\u00bb. <strong>OPcache<\/strong>\u201c y claves como opcache.enable u opcache.memory_consumption. En Linux, activo el m\u00f3dulo mediante el paquete php-opcache y un archivo opcache.ini en el directorio conf.d. En Windows, basta con introducir zend_extension=opcache en el archivo php.ini y reiniciar el servidor web. En el alojamiento compartido, suelo activar OPcache a trav\u00e9s de un archivo php.ini personalizado o del men\u00fa del cliente. En caso de cuellos de botella, tambi\u00e9n compruebo el <a href=\"https:\/\/webhosting.de\/es\/php-limite-de-memoria-aumentar-evitar-errores-performant\/\">Aumentar el l\u00edmite de memoria PHP<\/a>, para que OPcache y PHP-FPM tengan suficiente <strong>Recursos<\/strong> recibido.<\/p>\n\n<h2>Los interruptores m\u00e1s importantes explicados de forma comprensible<\/h2>\n\n<p>Con opcache.enable activo la cach\u00e9 para las solicitudes web, mientras que opcache.enable_cli controla el uso para los trabajos CLI, lo que resulta \u00fatil en las colas de trabajo. El n\u00facleo lo constituye opcache.memory_consumption, que especifica la memoria compartida disponible en megabytes; si se calcula con demasiada precisi\u00f3n, se producen expulsiones y nuevas <strong>Compilaciones<\/strong>. opcache.max_accelerated_files define cu\u00e1ntos archivos pueden almacenarse en la cach\u00e9; este valor debe superar de forma razonable el n\u00famero de archivos del proyecto. Con opcache.validate_timestamps y opcache.revalidate_freq determino el nivel de rigor con el que OPcache comprueba los cambios en los archivos, desde muy din\u00e1mico (desarrollo) hasta muy moderado (producci\u00f3n con vaciado manual). Guardo los comentarios con opcache.save_comments=1, porque muchas herramientas en <strong>DocBlocks<\/strong> dependen.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php_opcache_meeting_7093.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Comparaci\u00f3n de valores iniciales y perfiles<\/h2>\n\n<p>Para garantizar una puesta en marcha sin problemas, apuesto por perfiles claros para el desarrollo, la puesta en escena y la producci\u00f3n. De este modo, por un lado, obtengo ciclos de retroalimentaci\u00f3n r\u00e1pidos durante la codificaci\u00f3n y, por otro, un rendimiento fiable en el funcionamiento en vivo. Es importante que compruebe y ajuste regularmente estos valores iniciales con m\u00e9tricas reales. En instalaciones de WordPress m\u00e1s grandes, planifico generosamente el almacenamiento y las entradas, porque los plugins y los temas ocupan mucho espacio. <strong>Archivos<\/strong> . La siguiente tabla resume los valores iniciales recomendados, que luego ajusto con precisi\u00f3n en funci\u00f3n de la tasa de aciertos y las expulsiones.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Configuraci\u00f3n<\/th>\n      <th>Desarrollo<\/th>\n      <th>Puesta en escena\/Prueba<\/th>\n      <th>Producci\u00f3n<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>opcache.enable<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.enable_cli<\/td>\n      <td>0<\/td>\n      <td>0-1<\/td>\n      <td>1 (en trabajos CLI)<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.consumo_memoria<\/td>\n      <td>128-256 MB<\/td>\n      <td>256-512 MB<\/td>\n      <td>256-512+ MB<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.interned_strings_buffer<\/td>\n      <td>16-32 MB<\/td>\n      <td>32-64 MB<\/td>\n      <td>16-64 MB<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.max_accelerated_files<\/td>\n      <td>8000-10 000<\/td>\n      <td>10 000-20 000<\/td>\n      <td>10 000-20 000+<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.validate_timestamps<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>0-1 (dependiendo de Deploy)<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.revalidate_freq<\/td>\n      <td>0-2 s<\/td>\n      <td>60-300 s<\/td>\n      <td>300+ s o 0 (con comprobaci\u00f3n manual)<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.save_comments<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n    <\/tr>\n    <tr>\n      <td>opcache.fast_shutdown<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n      <td>1<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Esta matriz es deliberadamente pragm\u00e1tica, ya que los proyectos reales crecen de forma muy diferente. Empiezo con estos valores y luego observo la tasa de aciertos, la parte ocupada de la memoria compartida y la aparici\u00f3n de expulsiones. Si hay signos de presi\u00f3n, primero aumento opcache.memory_consumption en pasos moderados. A continuaci\u00f3n, ajusto opcache.max_accelerated_files hasta que el n\u00famero de archivos encaja c\u00f3modamente. De este modo, el <strong>Cache<\/strong> Eficaz y las consultas siguen siendo igual de r\u00e1pidas.<\/p>\n\n<h2>Configuraci\u00f3n seg\u00fan el entorno: desarrollo, puesta en escena, producci\u00f3n<\/h2>\n\n<p>En el desarrollo, es importante obtener respuestas r\u00e1pidas a los cambios en el c\u00f3digo, por lo que establezco validate_timestamps=1 y revalidate_freq en un valor muy bajo o incluso en 0. En la fase de prueba, compruebo la carga realista y asigno una memoria generosa para que los resultados se acerquen al funcionamiento posterior en vivo. En producci\u00f3n, aumento la frecuencia de comprobaci\u00f3n o desactivo completamente las marcas de tiempo si mi implementaci\u00f3n vac\u00eda la cach\u00e9 de forma selectiva despu\u00e9s. Para los trabajadores basados en CLI, activo enable_cli=1 para que los trabajos recurrentes tambi\u00e9n se ejecuten desde el <strong>Cach\u00e9 de c\u00f3digo byte<\/strong> . De este modo, cada entorno genera exactamente el comportamiento que necesito, sin sorpresas en los tiempos de respuesta.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-opcache-visualisierung-cache-9281.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Configuraci\u00f3n avanzada que a menudo marca la diferencia<\/h2>\n\n<p>Adem\u00e1s de los par\u00e1metros b\u00e1sicos, hay interruptores con los que puedo aumentar la estabilidad y la seguridad y minimizar los efectos secundarios:<\/p>\n\n<ul>\n  <li>opcache.max_wasted_percentage: Define a partir de qu\u00e9 grado de fragmentaci\u00f3n OPcache inicia una reconstrucci\u00f3n interna de la memoria. En bases de c\u00f3digo muy variables, reduzco ligeramente el valor para tener menos memoria \u201erecortada\u201c.<\/li>\n  <li>opcache.force_restart_timeout: intervalo de tiempo en segundos tras el cual OPcache realiza un reinicio forzado cuando es necesario reiniciar, pero los procesos siguen activos. Esto evita estados de incertidumbre prolongados.<\/li>\n  <li>opcache.file_update_protection: ventana de protecci\u00f3n en segundos durante la cual los archivos reci\u00e9n modificados no se almacenan inmediatamente en la cach\u00e9. Esto ayuda a evitar archivos a medio escribir durante las implementaciones o en unidades de red.<\/li>\n  <li>opcache.restrict_api: Restringe qu\u00e9 scripts pueden llamar a opcache_reset() y a las funciones de estado. En producci\u00f3n, lo configuro de forma estricta para que solo los puntos finales de administraci\u00f3n tengan acceso.<\/li>\n  <li>opcache.blacklist_filename: archivo en el que mantengo patrones que se excluyen de la cach\u00e9 (por ejemplo, generadores altamente din\u00e1micos). Esto ahorra espacio para scripts m\u00e1s cr\u00edticos.<\/li>\n  <li>opcache.validate_permission y opcache.validate_root: Activo cuando hay varios usuarios\/chroots en juego. De esta forma, PHP evita que el c\u00f3digo almacenado en cach\u00e9 de un contexto se utilice sin autorizaci\u00f3n en otro.<\/li>\n  <li>opcache.use_cwd y opcache.revalidate_path: controlan c\u00f3mo OPcache identifica los scripts cuando las rutas se integran a trav\u00e9s de diferentes directorios de trabajo\/enlaces simb\u00f3licos. En el caso de los enlaces simb\u00f3licos de lanzamiento, compruebo estos valores espec\u00edficamente para evitar cach\u00e9s duplicadas.<\/li>\n  <li>opcache.cache_id: cuando varios hosts virtuales comparten el mismo SHM (algo poco habitual), separo las cach\u00e9s de forma clara mediante un ID \u00fanico.<\/li>\n  <li>opcache.optimization_level: Normalmente lo dejo en el valor predeterminado. Solo en casos extremos de depuraci\u00f3n reduzco temporalmente las pasadas de optimizaci\u00f3n.<\/li>\n<\/ul>\n\n<h2>Precarga: mantener partes del c\u00f3digo permanentemente en la memoria<\/h2>\n\n<p>Con PHP 7.4+, puedo cargar y vincular archivos centrales del marco de trabajo o del proyecto al iniciar el servidor mediante opcache.preload y opcache.preload_user. La ventaja: las clases est\u00e1n disponibles sin autoload hits y las rutas calientes est\u00e1n disponibles de inmediato. Algunas reglas pr\u00e1cticas:<\/p>\n\n<ul>\n  <li>La precarga resulta especialmente \u00fatil en bases de c\u00f3digo grandes y estables (por ejemplo, Symfony, bibliotecas centrales propias). En WordPress la utilizo con cautela, ya que el n\u00facleo y los plugins se actualizan con mayor frecuencia.<\/li>\n  <li>Un archivo de precarga contiene llamadas espec\u00edficas a opcache_compile_file() o integra un autocargador que define clases. <em>de antemano<\/em> cargando.<\/li>\n  <li>Cada cambio de c\u00f3digo en los archivos relevantes para la precarga requiere un reinicio de PHP-FPM para que se reconstruya la precarga. Lo integro en las implementaciones.<\/li>\n  <li>Mido el efecto por separado: no todos los c\u00f3digos se benefician; la precarga consume memoria compartida adicional.<\/li>\n<\/ul>\n\n<h2>JIT y OPcache: ventajas, limitaciones, requisitos de memoria<\/h2>\n\n<p>Desde PHP 8 existe el compilador Just-In-Time (JIT), que se controla a trav\u00e9s de OPcache (opcache.jit, opcache.jit_buffer_size). Para cargas de trabajo web t\u00edpicas con carga de E\/S y bases de datos, JIT suele aportar poco. En el caso de c\u00f3digo con gran carga de CPU (por ejemplo, procesamiento de im\u00e1genes\/datos), puede ser de gran ayuda. Yo procedo de la siguiente manera:<\/p>\n\n<ul>\n  <li>Activo JIT de forma conservadora y mido las m\u00e9tricas de usuarios reales, as\u00ed como los perfiles de CPU. La activaci\u00f3n ciega aumenta los requisitos de memoria y puede provocar casos extremos.<\/li>\n  <li>Dimensiono el b\u00fafer JIT en funci\u00f3n de las rutas con mayor carga de CPU. Los b\u00faferes demasiado peque\u00f1os no aportan ning\u00fan valor a\u00f1adido, mientras que los demasiado grandes desplazan el c\u00f3digo byte.<\/li>\n  <li>Si la tasa de aciertos o la ocupaci\u00f3n SHM se ven afectadas, doy prioridad a OPcache frente a JIT. La cach\u00e9 de c\u00f3digo byte es la herramienta m\u00e1s importante para la mayor\u00eda de los sitios web.<\/li>\n<\/ul>\n\n<h2>Rutas de archivos, enlaces simb\u00f3licos y estrategias de implementaci\u00f3n seguras<\/h2>\n\n<p>OPcache se basa en rutas. Por eso me centro en la estrategia de implementaci\u00f3n:<\/p>\n\n<ul>\n  <li>Lanzamientos at\u00f3micos mediante enlaces simb\u00f3licos (por ejemplo, \/releases\/123 -&gt; \/current): limpio, pero cuidado con opcache.use_cwd y el comportamiento de realpath. Evito las cach\u00e9s duplicadas haciendo que todos los trabajadores vean la misma ruta real de forma coherente.<\/li>\n  <li>Con validate_timestamps=0, la cach\u00e9 debe <em>en todas partes<\/em> Se vac\u00edan: despu\u00e9s del cambio, vac\u00edo OPcache de forma selectiva en todos los hosts\/pods y reinicio PHP-FPM de forma controlada.<\/li>\n  <li>Ajusto realpath_cache_size y realpath_cache_ttl con OPcache para que las b\u00fasquedas de archivos sigan siendo r\u00e1pidas y estables.<\/li>\n  <li>En unidades de red (NFS\/SMB), aumento file_update_protection y configuro las implementaciones para que los archivos se sustituyan de forma at\u00f3mica.<\/li>\n<\/ul>\n\n<p>Para reinicios muy r\u00e1pidos, suelo utilizar un procedimiento de dos pasos: primero, calentamiento en segundo plano; luego, una recarga breve y coordinada de todos los trabajadores, para que el primer tr\u00e1fico en vivo encuentre una cach\u00e9 ya calentada.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php-opcache-workspace-5931.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Cach\u00e9 de archivos, calentamiento y cebado<\/h2>\n\n<p>Adem\u00e1s de la memoria compartida, OPcache puede escribir opcionalmente el c\u00f3digo byte en el disco (opcache.file_cache). Esto resulta \u00fatil en situaciones especiales:<\/p>\n\n<ul>\n  <li>En entornos de contenedores, se puede utilizar una cach\u00e9 de archivos. <em>entre<\/em> Los reinicios de FPM reducen los tiempos de recompilaci\u00f3n, siempre que el almacenamiento sea r\u00e1pido.<\/li>\n  <li>Utilizo opcache.file_cache con precauci\u00f3n: en sistemas de archivos lentos o distribuidos, no aporta mucho y aumenta la complejidad.<\/li>\n  <li>opcache.file_cache_only es un caso especial para entornos sin SHM, poco habitual en configuraciones orientadas al rendimiento.<\/li>\n<\/ul>\n\n<p>Para los calentamientos, me preparo peque\u00f1os \u201eprimers\u201c:<\/p>\n\n<ul>\n  <li>Un script CLI llama a opcache_compile_file() para archivos calientes, por ejemplo, autocargadores, clases centrales del framework, ayudantes grandes.<\/li>\n  <li>Un rastreador visita las rutas principales (p\u00e1gina de inicio, inicio de sesi\u00f3n, finalizaci\u00f3n de la compra) para que el c\u00f3digo byte y las cach\u00e9s posteriores est\u00e9n listos a tiempo.<\/li>\n  <li>Programo los calentamientos para que est\u00e9n listos justo antes de cambiar la versi\u00f3n.<\/li>\n<\/ul>\n\n<h2>OPcache en la pila: PHP-FPM, cach\u00e9 de objetos y cach\u00e9 de p\u00e1ginas<\/h2>\n\n<p>OPcache muestra su potencial sobre todo en combinaci\u00f3n con PHP-FPM, una configuraci\u00f3n de procesos limpia y capas de cach\u00e9 adicionales. En WordPress, lo combino con una cach\u00e9 de objetos (como Redis) y una cach\u00e9 de p\u00e1ginas para aliviar la carga de la base de datos y el renderizado. Para ello, presto atenci\u00f3n a la <a href=\"https:\/\/webhosting.de\/es\/php-single-thread-performance-wordpress-hosting-velocity\/\">Rendimiento de un solo subproceso<\/a>, ya que las solicitudes PHP dependen en gran medida de los n\u00facleos individuales de la CPU. Si, a pesar de ello, se produce presi\u00f3n, distribuyo la carga a trav\u00e9s de PHP-FPM-Worker, sin seleccionar una memoria compartida de OPcache demasiado peque\u00f1a. As\u00ed utilizo el <strong>Pila<\/strong> por completo, en lugar de limitarse a girar un tornillo de ajuste.<\/p>\n\n<h2>Errores frecuentes y comprobaciones r\u00e1pidas<\/h2>\n\n<p>Una cach\u00e9 demasiado peque\u00f1a provoca expulsiones, que puedo detectar en el estado de OPcache o en phpinfo(). Si esto ocurre, aumento gradualmente opcache.memory_consumption y compruebo el efecto a trav\u00e9s de la tasa de aciertos. Si los archivos siguen sin acelerarse, establezco opcache.max_accelerated_files por encima de la cantidad real de archivos del proyecto. Si hay problemas de implementaci\u00f3n, compruebo validate_timestamps: con 0, el bytecode antiguo permanece activo hasta que vac\u00edo expl\u00edcitamente la cach\u00e9. Herramientas como Doctrine requieren DocBlocks, por lo que dejo save_comments=1 para <strong>Error<\/strong> evitarlo mediante la falta de anotaciones.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php_opcache_nachtarbeit_4382.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Supervisar e interpretar OPcache<\/h2>\n\n<p>Mido la tasa de aciertos y aspiro a alcanzar valores cercanos al 100 % de forma permanente, para que las consultas casi siempre se inicien desde la cach\u00e9. Adem\u00e1s, observo la utilizaci\u00f3n de la memoria y el n\u00famero de expulsiones para detectar atascos de forma temprana. Con opcache_get_status() creo peque\u00f1os paneles de control o alimento soluciones de monitorizaci\u00f3n existentes. De este modo, puedo ver inmediatamente las tendencias tras los lanzamientos o las actualizaciones de plugins. Con estas m\u00e9tricas, tomo decisiones fundamentadas. <strong>Decisiones<\/strong> y solo adapto lo que es realmente necesario.<\/p>\n\n<p>Directrices concretas que han demostrado su eficacia:<\/p>\n\n<ul>\n  <li>Tasa de aciertos &gt; 99 % bajo carga normal y m\u00e1xima; por debajo de eso, compruebo la distribuci\u00f3n de archivos y el calentamiento.<\/li>\n  <li>Porcentaje libre de SHM constante &gt; 5-10 %; de lo contrario, escalo la memoria.<\/li>\n  <li>Evictions a lo largo del tiempo: las fluctuaciones puntuales tras la implementaci\u00f3n son aceptables; las evictions continuas indican un dimensionamiento insuficiente o una fragmentaci\u00f3n elevada.<\/li>\n  <li>Vigilar la memoria desperdiciada: si alcanza el l\u00edmite, planificar una reconstrucci\u00f3n controlada de OPcache (por ejemplo, en ventanas de mantenimiento).<\/li>\n<\/ul>\n\n<h2>Ejemplo: configuraci\u00f3n de WordPress con mucho tr\u00e1fico<\/h2>\n\n<p>Para sitios web grandes de WordPress, elijo opcache.enable=1 y opcache.enable_cli=1, para que tambi\u00e9n se beneficien los trabajadores CLI. Me gusta establecer la memoria compartida en 384 MB o m\u00e1s cuando hay muchos plugins y un tema con muchas funciones. Aumento opcache.interned_strings_buffer a 64 MB, porque muchos nombres de clases y funciones se repiten en todas las solicitudes. Para entornos de rendimiento extremo, establezco validate_timestamps=0 y revalidate_freq=0, pero vac\u00edo la cach\u00e9 inmediatamente despu\u00e9s de cada lanzamiento. Es importante dise\u00f1ar las implementaciones de manera que no haya antiguos <strong>c\u00f3digo de bytes<\/strong> permanece en circulaci\u00f3n.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2025\/12\/php_opcache_schreibtisch_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Flujo de trabajo pr\u00e1ctico para ajustes y despliegues<\/h2>\n\n<p>Trabajo en ciclos fijos: medir, modificar, controlar. Primero, guardo valores de estado como la tasa de visitas, la ocupaci\u00f3n y las expulsiones, luego ajusto un par\u00e1metro y vuelvo a medir. Antes de un lanzamiento, borro el OPcache de forma selectiva con las marcas de tiempo desactivadas, ya sea reiniciando PHP-FPM o mediante un peque\u00f1o script. A continuaci\u00f3n, compruebo los picos de carga con tr\u00e1fico real o benchmarks representativos. Si se produce un comportamiento an\u00f3malo, tambi\u00e9n compruebo <a href=\"https:\/\/webhosting.de\/es\/fragmentacion-de-memoria-alojamiento-web-php-mysql-optimizacion-flujo-de-bytes\/\">Fragmentaci\u00f3n de la memoria<\/a>, porque reducen el espacio \u00fatil. <strong>Compartido<\/strong> La memoria se deteriora.<\/p>\n\n<p>Algunas rutinas adicionales que han demostrado su eficacia en equipos:<\/p>\n\n<ul>\n  <li>Versiones de los cambios en los par\u00e1metros: opcache.ini en el repositorio, cambios mediante solicitud de extracci\u00f3n y registro de cambios.<\/li>\n  <li>Canary Deploys: primero, solo una parte de los trabajadores\/pods carga nuevas versiones y crea una cach\u00e9; luego, se realiza el despliegue en todas las instancias.<\/li>\n  <li>Interruptor de emergencia: un punto final de administraci\u00f3n interno con acceso seguro que permite llamadas opcache_reset() y opcache_invalidate() espec\u00edficas, combinadas con opcache.restrict_api.<\/li>\n  <li>Calcular el orden de magnitud: como regla general, calculo inicialmente entre 1 y 2 MB de OPcache por cada 100-200 archivos PHP y luego lo ajusto en funci\u00f3n de las m\u00e9tricas reales. Para WordPress con muchos plugins, a\u00f1ado un margen.<\/li>\n<\/ul>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>OPcache acelera las aplicaciones PHP al almacenar el c\u00f3digo compilado <strong>c\u00f3digo de bytes<\/strong> en la RAM. Con los ajustes adecuados para la memoria, el n\u00famero de archivos y la estrategia de marcas de tiempo, se consiguen tiempos de respuesta constantemente cortos. Aseg\u00farese de que todo est\u00e9 sincronizado con PHP-FPM y otras capas de cach\u00e9 para que toda la pila funcione correctamente. Supervise la tasa de aciertos, la ocupaci\u00f3n y las expulsiones para poder realizar ajustes espec\u00edficos. De este modo, se asegurar\u00e1 un rendimiento alto y fiable. <strong>Plataforma<\/strong> Para cargas elevadas y crecimiento.<\/p>","protected":false},"excerpt":{"rendered":"<p>Aprende a configurar correctamente PHP OPcache y a mejorar significativamente el rendimiento de tus aplicaciones con un ajuste espec\u00edfico de php opcache.<\/p>","protected":false},"author":1,"featured_media":15899,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[780],"tags":[],"class_list":["post-15906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administration-anleitungen"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"2623","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":null,"_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"PHP OPcache","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"15899","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/15906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/comments?post=15906"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/15906\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media\/15899"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media?parent=15906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/categories?post=15906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/tags?post=15906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}