Cómo identificar problemas de límite de memoria PHP en PrestaShop

La lista de productos se carga en una página en blanco. La importación falla en la fila 4,300, y vuelve a fallar en la fila 4,300 al intentarlo de nuevo. Se carga una foto sin problemas, pero nunca se genera una miniatura. Tres personas reportan tres problemas, y la causa subyacente es la misma.

La causa es la memoria. Hasta que algo falla, la mayoría de los dueños de tiendas nunca revisan esta configuración, y una vez que falla, se le atribuye la culpa de muchos problemas que nunca causó.

A continuación, se explica cómo identificar problemas de límite de memoria PHP en PrestaShop, cómo confirmar que ese es el problema y qué hacer después. Algunas comprobaciones las puede realizar usted mismo; el resto son instrucciones para enviarlas a su proveedor de hosting.

1.0 ¿Cuál es realmente el límite de memoria de PHP?

PrestaShop está escrito en PHP. Cada vez que alguien carga una página, se ejecuta un script para construirla, y memory_limit limita la cantidad de memoria que puede usar ese script.

Ese límite se aplica a un solo script, no a todo su sitio web ni a todo su servidor, y casi toda la confusión en este caso se remonta a esa distinción. 

El manual de PHP menciona que el valor predeterminado de memory_limit es de 128 MB.

Así, un servidor con 16 GB de RAM puede fallar incluso con 128 MB. Nadie miente sobre el hardware: PHP impone un límite máximo, muy por debajo de lo que la máquina permitiría, y detiene el script en cuanto se alcanza. Que haya mucha memoria libre junto con un mensaje de error de PrestaShop por falta de memoria es una combinación habitual, y un error de PrestaShop por falta de memoria en PHP significa lo mismo.

Dos límites, y el que esté más bajo es el que alcanzas. No toques la configuración de PHP ni añadas RAM: nada mejora. De ahí la decepción cuando la solución de "actualizar el plan de hosting" no funciona.

2.0 Plan de alojamiento frente al límite de memoria del servidor PrestaShop

Comparándolas una al lado de la otra, la diferencia es más clara:

Lo que esLo que limitaValor típico¿Quién lo cambia?
Límite de memoria PHPCarga de una página128 MB a 512 MBUsted o su anfitrión, en un archivo de configuración
RAM del servidorTodo funcionando2 GB a 32 GBTu plan de alojamiento

Ambos factores son importantes, y la forma en que fallan indica cuál es el problema. Si se alcanza el límite de PHP, una página deja de funcionar mientras la tienda sigue atendiendo a los clientes. Si se agota la RAM, todo se ralentiza de repente, incluida la base de datos. Un sitio web lento apunta a problemas de RAM o tráfico; una página que falla mientras el resto funciona correctamente apunta a este artículo.

3.0 ¿Por qué una tienda PrestaShop pierde memoria?

Hay una respuesta real a por qué PrestaShop se queda sin memoria, y "el software está sobrecargado" no es la causa. Administrar una tienda implica realizar varias tareas realmente pesadas que un sitio web tipo catálogo nunca tiene que hacer. Hay cuatro puntos importantes.

  1. Los datos del producto son más importantes de lo que parecen.Cada producto incluye descripciones en todos los idiomas en los que se vende, además de reglas de precios, categorías, combinaciones y existencias. Por sí solo, eso no supone ningún problema. Si se solicitan cinco mil unidades a la vez durante una exportación, la situación cambia drásticamente.

2. El consumo de memoria de las imágenes depende de sus dimensiones, no del tamaño del archivo : Esto suele sorprender. Si abres una foto de 3 MB con 6000 píxeles de ancho, necesitará aproximadamente 70 MB antes de que comience cualquier redimensionamiento. El peso que ocupa un archivo en el disco apenas predice el coste de su procesamiento, por lo que algunas fotos generan miniaturas y otras no.

3. Los módulos se cargan simultáneamente : Tu página de administración carga e inicializa todos los módulos instalados al acceder, incluidos los cuarenta que esa pantalla nunca utilizará. Individualmente, cuestan poco. Una tienda establecida utiliza sesenta, y sesenta es otra historia.

4. El panel de administración es la parte más pesada : más datos en pantalla, menos accesos directos, sin el almacenamiento en caché que mantiene la tienda online rápida. Por lo tanto, un problema de memoria PHP en PrestaShop recae sobre ti y tu personal, mientras que los clientes siguen sin verse afectados, lo que hace que sea invisible para quienes te pagan.

4.0 Síntomas y mensajes de error que conviene reconocer

Ocasionalmente, el mensaje aparece en pantalla y tiene este aspecto:

Error fatal: Se ha agotado el tamaño de memoria permitido de 134217728 bytes.
(Se intentó asignar 20480 bytes)

Analicemos los dos números por separado. Convertidos de bytes, 134217728 equivalen a 128 MB, por lo que la tienda estaba utilizando el límite predeterminado y lo había agotado. Es importante tenerlo en cuenta, ya que el mensaje indica la configuración actual.

Ese segundo número es una pista falsa. Es pequeño, por lo que parece el culpable, pero no lo es: es lo último que solicitó memoria, una vez que todo lo demás se había agotado. La gota que colmó el vaso, no la causa. La mayoría de los propietarios de tiendas buscan un error de asignación de memoria en PrestaShop basándose en ese número, pero no les lleva a ninguna parte.

5.0 El error de límite de memoria de PrestaShop que nunca llegas a ver

Las tiendas online ocultan los errores a los visitantes, y con razón. Cualquier detalle técnico en tu tienda da una imagen poco profesional y expone información confidencial sobre tu servidor. El efecto secundario recae sobre ti: aunque configures la tienda correctamente, tampoco verás nada útil.

Los errores ocultos a los visitantes no te dejan nada que leer.

En lugar de un mensaje, espere uno de estos:

Una página completamente blanca, sin nada en el navegador.

Una página de error HTTP 500

Media página: la parte superior carga, luego se detiene con el diseño roto.

Exportaciones que se descargan y abren correctamente, pero a las que les faltan filas al final.

Productos que se cargan sin problemas y nunca muestran una miniatura.

La página en blanco es el clásico, y el menos útil: nada que leer, nada que pegar en un cuadro de búsqueda.

6.0 Asegurarse de que realmente sea memoria

Confirma el diagnóstico antes de modificar cualquier configuración. A simple vista, estos dos problemas parecen idénticos; solo uno afecta a la memoria, y sus soluciones no tienen nada en común.

El error diceEl problema es que La solución implica
Tamaño de memoria permitido… agotadoLímite de memoria PHPlímite de memoria, que se explica a continuación.
Tiempo máximo de ejecución… excedidoUn límite de tiempo, no de memoria.max_execution_time

En ambos casos, la página se queda en blanco. Pídele a tu proveedor de hosting el registro de errores de PHP correspondiente al momento en que ocurrió el problema, ya que ahí es donde se muestra el mensaje real cuando no se visualiza nada. Con una sola solicitud, te ahorrarás muchas conjeturas.

7.0 Cómo comprobar el límite de memoria PHP en PrestaShop

El límite actual de memoria PHP se puede comprobar en el propio panel de administración de PrestaShop y no requiere acceso al servidor.

Dirígete a Parámetros avanzados y luego a Información , donde encontrarás la configuración de PHP, incluyendo el límite de memoria. El límite de memoria afecta tanto a la tienda como al panel de administración. Por lo tanto, esta es la configuración que podemos revisar primero.

Hay una confusión que conviene evitar. Las importaciones y las actualizaciones de feeds suelen ejecutarse durante la noche según un cronograma, y ​​estas tareas a menudo utilizan una configuración de memoria diferente a la de tu sitio web. Aunque veas un valor correcto en el panel de administración, la importación falla igualmente. Es el mismo servidor, pero con una configuración diferente. Coméntaselo a tu proveedor de hosting.

8.0 Cómo aumentar el límite de memoria PHP en PrestaShop y solucionar errores de memoria agotada

Los requisitos del sistema de PrestaShop exigen un mínimo de 256 MB, y el instalador lo comprueba antes de permitirle continuar.

Existen varias maneras de aumentar el límite de memoria PHP en la configuración de PrestaShop. La que se aplique dependerá de la configuración de tu hosting, algo que no puedes determinar simplemente navegando por tu tienda. Pregunta o verifica.

8.1 La opción más sencilla: pregúntale a tu anfitrión.

En el alojamiento compartido, esta suele ser la respuesta completa. Muchos paneles de control ofrecen una pantalla de configuración de PHP que puedes modificar tú mismo; si no, el soporte técnico lo hará. Exprésalo así:

¿Podrías aumentar el límite de memoria a 256M para mi sitio?
PrestaShop necesita un mínimo de 256 MB.

Si el proveedor de alojamiento lo rechaza, entonces tendremos que buscar otras opciones de alojamiento.

8.2 Si usted o su desarrollador tienen acceso al servidor

Una simple línea en un archivo llamado php.ini lo soluciona:

memory_limit = 256M

Hay dos problemas que suelen ocurrir con frecuencia. Un servidor puede tener varios archivos php.ini, pero solo lee uno, por lo que una modificación correcta puede terminar en un archivo que nadie consulta. El segundo problema es el reinicio: en muchas configuraciones, nada surte efecto hasta que se reinicia PHP.

8.4 El método .htaccess y por qué a menudo no hace nada.

Si buscas en línea, te dirán que añadas una línea a .htaccess, el archivo de configuración en la carpeta raíz de tu tienda:

php_value memory_limit 256M

A veces funciona. En la mayoría de los servicios de alojamiento web modernos, no hace nada, y en algunos, todo el sitio devuelve un error 500 porque el servidor rechaza esa instrucción. 

Intente esto únicamente como último recurso y solo si puede deshacer el cambio fácilmente.

Esta plataforma tiene una particularidad: al guardar la configuración de URL, PrestaShop modifica el archivo .htaccess, por lo que una línea añadida manualmente puede desaparecer sin previo aviso. Revisa el archivo nuevamente después de modificar el SEO y las URL.

9.0 Verificación de que el cambio funcionó correctamente.

No te fíes de la palabra de nadie, ni siquiera de la tuya. Confirmarlo lleva unos dos minutos.

Vuelve a Parámetros avanzados y luego a Información. ¿Cambió el número? Si sigue siendo 128 MB, significa que la edición no se aplicó, lo cual es lo más común.

Repite el proceso que estaba fallando anteriormente. Si la configuración indica 256 MB y la página sigue fallando, algo más la está anulando.

Borre la caché de la tienda desde Parámetros avanzados y, a continuación, desde Rendimiento.

Espera unos días antes de darlo por solucionado, porque lo que vuelva a aparecer suele ser compatible con tu catálogo.

Cuando un número se resiste a moverse, sospeche primero que se trata del archivo incorrecto y, a continuación, que un panel de control está sobrescribiendo su propia configuración sobre cualquier cambio realizado en el disco.

9.2 Cuándo aumentar el límite es la respuesta incorrecta

A menudo, esta es la respuesta correcta, ya que 128 MB es realmente muy poco para un panel de administración de PrestaShop moderno. Puedes usar 256 MB sin preocuparte demasiado.

Si superas los 512 MB, empieza a plantearte otra pregunta. A partir de ahí, normalmente algún proceso consume memoria en proporción a tu catálogo, así que cada aumento supone añadir unos miles de productos más antes de que vuelva a ocurrir el mismo fallo. Una hora de trabajo de un desarrollador cuesta menos que un servidor más potente cada año.

La forma en que se originó el problema puede ayudarnos a determinar a qué situación nos enfrentamos. Un problema que surgió gradualmente a medida que crecía el catálogo es un problema de código o de datos disfrazado de problema de memoria. Un problema que comenzó el día en que se instaló un módulo pertenece a ese módulo. Y un problema que siempre estuvo presente, en un almacenamiento que aún ocupa 128 MB, en realidad es solo una cuestión de configuración.

Conclusión final: Evitemos que vuelva a suceder.

  • Alcanza los 256 MB y mantente ahí. Es el mínimo documentado, no un lujo.
  • Cambia el tamaño de las fotos grandes antes de subirlas: se consume memoria por píxel, y un ancho de 2000 píxeles es adecuado para la mayoría de las tiendas.
  • Deshabilitado no es lo mismo que desaparecido, así que desinstala lo que ya no uses.
  • Programa las importaciones grandes fuera de tus horas de mayor actividad.
  • Ensaya una importación importante en una copia de prueba, nunca en la tienda en vivo durante la venta.
  • Haz que tu desarrollador lea el registro de errores después de que falle una operación masiva, en lugar de asumir que funcionó.
  • Esa última se merece su lugar. Una operación a granel que queda a medias es peor que una que falla por completo, porque no tienes ni idea de qué mitad se completó, y leer el registro lleva un minuto.

Esta fue la guía completa para identificar problemas de límite de memoria PHP en PrestaShop. En Knowband, nos especializamos en plugins de comercio electrónico, personalización de sitios web y desarrollo de aplicaciones para que tu tienda funcione a la perfección. ¿Necesitas ayuda de expertos? Contáctanos en [email protected] o en el servicio de asistencia de Knowband; estaremos encantados de ayudarte.

Deje un comentario