Ir al contenido

El medio de los artesanos de la web miércoles, 7 de octubre de 2026

MailStudio
Back-end

Laravel 13.35.0 limita la memoria de las colas por porcentaje y bloquea el scheduler a un solo servidor

Laravel 13.35.0, publicada el 6 de octubre de 2026, permite limitar la memoria de los workers de colas en porcentaje y garantiza que las tareas programadas se ejecuten en un solo servidor dentro de una flota multiservidor. La versión también corrige varios…

Laravel 13.35.0 salió el 6 de octubre de 2026. Introduce un límite de memoria para los workers de colas expresado en porcentaje de la máquina en lugar de un valor fijo, además de un método nativo para garantizar que una tarea programada se ejecute en un único servidor dentro de una flota. La versión también corrige varios comportamientos erráticos en las relaciones Eloquent y en la gestión de archivos.

Un límite de memoria relativo en lugar de un valor fijo

Hasta ahora, queue:work --memory solo aceptaba un valor absoluto en megabytes. En una flota de workers desplegada en máquinas de distintos tamaños, esa cifra fija obligaba a ajustarla manualmente para cada destino, o a infradimensionarla por prudencia. Laravel 13.35.0 acepta ahora un porcentaje, calculado sobre la memoria total disponible del contenedor o la máquina anfitriona. El worker se reinicia limpiamente en cuanto supera ese umbral relativo, evitando tanto reinicios demasiado frecuentes en instancias pequeñas como fugas de memoria silenciosas en las más grandes.

Scheduler: ejecución única garantizada en varios servidores

El nuevo método Schedule::alwaysOnOneServer() se aplica a todas las tareas programadas de una aplicación, sin tener que repetir onOneServer() en cada entrada individualmente. Para los equipos que despliegan la misma base de código en varios servidores de aplicación detrás de un balanceador de carga, es el ajuste que evita que una tarea cron se dispare dos veces en el mismo minuto. El comando schedule:list --json expone ahora un campo onOneServer por tarea, lo que permite auditar la configuración sin leer el código fuente.

Correcciones destacadas: Eloquent, descargas y paginación

Además de las dos novedades principales, la versión corrige fallos reportados por la comunidad: un comportamiento incorrecto en las relaciones HasOneThrough, HasManyThrough y morphTo en ciertos escenarios de carga anidada, y una regresión en las actualizaciones de rutas JSON en colecciones cifradas. También se corrige la descarga de archivos con nombres no-ASCII, así como un fallo de unión de consultas combinado con paginación por cursor.

CambioAntes de 13.35.0Desde 13.35.0
Memoria de los workersValor fijo en MB, a ajustar por máquinaPorcentaje de la memoria disponible
Ejecución única del scheduleronOneServer() repetido por tareaSchedule::alwaysOnOneServer() global
Auditoría del schedulerRequería leer el código fuenteschedule:list --json expone onOneServer
Almacenamiento de archivoscopyToDisk()/moveToDisk() sin soporte de enumSoporte de enums nativos de PHP

En cuanto al almacenamiento, copyToDisk() y moveToDisk() aceptan ahora enums nativos de PHP, y una nueva opción lazy_root_creation evita crear un directorio raíz hasta que se escribe realmente un archivo en él. Estos ajustes se suman al ecosistema de herramientas de línea de comandos que los equipos backend combinan a diario, ya sea Artisan o alguno de los gestores de paquetes JavaScript comparados en Mail Studio.

Punto de atención. El umbral en porcentaje se calcula sobre la memoria total reportada por el sistema, no sobre la asignada al contenedor si este corre sin cgroups correctamente configurados. En una infraestructura donde los límites de contenedor no se exponen al kernel, el porcentaje puede quedar anclado a la memoria del host físico: conviene comprobar lo que devuelve free -m desde dentro del contenedor antes de migrar la configuración.

// Ajuste anterior: valor fijo, duplicado por entorno
// php artisan queue:work --memory=512

// Nuevo ajuste: porcentaje de la memoria disponible
php artisan queue:work --memory=75%

// Scheduler: ejecución única en toda la flota
use Illuminate\Support\Facades\Schedule;

Schedule::alwaysOnOneServer();

Schedule::command('reports:generate')->dailyAt('03:00');
Schedule::command('cache:prune-stale-tags')->hourly();

Con esta versión, Laravel convierte un límite de memoria fijo en un presupuesto relativo a la máquina, un detalle técnico menor que sin embargo evita reinicios indeseados de workers en producción.

El paso a estas nuevas opciones no rompe ninguna firma existente: las aplicaciones que siguen pasando un valor absoluto a --memory conservan exactamente el mismo comportamiento de antes. La migración es, por tanto, puramente opcional, en línea con la política de compatibilidad ya observada en cómo Node.js gestiona sus valores por defecto en el ecosistema backend competidor.

Lo que hay que recordar

Laravel 13.35.0 corrige dos molestias operativas concretas para los equipos que gestionan colas y tareas programadas en producción multiservidor: la memoria de los workers por fin se expresa en proporción a la máquina, y la ejecución única de las tareas programadas pasa a ser un ajuste global en lugar de una disciplina tarea por tarea. Las 56 pull requests fusionadas en esta versión, obra de 28 colaboradores, son en su mayoría correcciones puntuales más que nuevas funcionalidades.

En los proyectos que mantengo en producción, el ajuste fijo de --memory siempre fue un falso amigo: había que recalcularlo cada vez que cambiaba la instancia, o fijarlo bajo por prudencia y perder eficiencia. El porcentaje es una solución sencilla a un problema que la comunidad Laravel lleva años señalando, y es el tipo de cambio discreto que dice más sobre la madurez de un framework que las funciones vistosas. — Simon Janvier

Para saber más: notas de la versión completa de Laravel 13.35.0 en GitHub.

Compartir LinkedIn Bluesky Hacker News E-mail

Leer también