Tanto si trabajas sobre un hospedaje, como si tienes un servidor dedicado, te puedes encontrar con el problema de que tu WordPress no te permita subir imágenes. Si tras mirar los logs has determinado que tienes este problema, espero que esta solución te ayude, además no se limita exclusivamente a este CMS, sino que te puede pasar en cualquier tipo de script que hayas creado o utilices, por eso veremos como solucionar el error Unable to allocate memory for pool en linux.
Qué es el APC de PHP y para qué sirve
Lo primero que me gustaría es explicarte de dónde viene el problema y por qué se está causando, pero si tienes algo más de prisa puedes pasar directamente a la sección de abajo y saltarte la lección de historia. El problema viene dado por el APC de PhP, el APC es el Alternative PHP Cache, por lo que tiene que ver con la capacidad de almacenaje de caché que tengamos configurado en php.
Antes, cuando los servidores tenían poca ram, véase 64MB o así, se estableció este límite en 32MB, y es lo que PhP utiliza de forma predeterminada si no se configura otra cosa, por lo que hoy en día que trabajamos con servidores de mínimo 2GB de ram, podemos pensar en aumentar el tamaño del APC para evitar que nos bloquee por ejemplo la subida de archivos.
Al tener archivos pequeños, de menos de 100 kbs, php es capaz de subirlos, por que caben en la memoria restante que siempre queda del APC, y cuando tratamos de subir archivos mayores dará error. Hay dos tipos de solución para este problema, aquí vamos a ver una, la otra, que nunca debemos usar, es el poner el valor TTL a cero, ya que esto provocaría que la caché se vacíe completamente cada vez que se llene, y esto haría que no sirviese para nada cachear el php.
El APC es una caché de las versiones compiladas de los archivos PHP, para no tener que compilar los PHP al vuelo cada vez.
Dependiendo del tipo de plataforma que estemos usando, hay unos estándares a configurar como mínimo para que todo vaya bien y no encontrarnos con estos problemas, de ahí que por ejemplo para un Magento haga falta configurarlo a 60MB, para un WordPress a 40MB, etc. Pero nosotros vamos a ver cómo y donde configurar el APC, y luego ya puedes o bien poner uno de la lista, o si te sobra memoria poner la cantidad que estimes oportuna, nosotros vamos a ver el valor de 128MB.
Cómo aumentar el tamaño del APC o Alternative PHP Cache
Si usas wordpress, posiblemente no puedas subir imágenes de más de 100 kbs. Si esto es así es un claro diagnóstico de que tienes el APC con una configuración inferior a lo que necesitas, y por tanto posiblemente esto solucione tu problema.
Para poder aumentar esto vamos a necesitar, o bien ser administradores y tener acceso a nuestro servidor y configuración de php mediante la consola de comandos, o solicitar a nuestro proveedor de hosting que nos cambie los valores, es decir, nos solucione el problema.
Lo primero que haremos será conectarnos a la consola, tan sencillo como abrir putty o tu programa favorito para ello y entrar en modo root (o coger permisos con sudo).
Una vez conectados, nos iremos a editar el php.ini, dependiendo de tu distribución de linux y el tipo de instalación estará en una ruta o en otra, pero normalmente deberías encontrarlo en la que te dejo ya con el comando del editor:
nano /etc/php.ini
Haremos una búsqueda dándole a ctrl+w, escribimos apc.shm y le damos a intro. Si nos aparece el valor en pantalla, lo modificaremos por 128, en caso contrario nos iremos al final del archivo y ahí insertaremos esta línea:
apc.shm_size = 128
Una vez puesta le daremos a ctrl+o para guardar y ctrl+x para salir, y reiniciaremos apache:
service httpd restart o service apache2 restart
A partir de este momento, si probamos a subir otra vez una imágen debería empezar a funcionar correctamente.
Lista de tamaños APC para los CMS más conocidos
Si el valor de 128 que hemos usado arriba te parece demasiado, puedes usar el mínimo necesario para tu cms:
- WordPress: apc.shm_size = 40
- Magento: apc.shm_size = 60
- Joomla: apc.shm_size = 64
Si conoces el tamaño mínimo de algún otro cms, no dudes en dejar un comentario para que lo agreguemos a la lista.
Gracias a Barreytor por la ampliación de información acerca del APC.
¿Has tenido este problema? ¿Lo has podido solucionar tú o has contactado con tu hosting?