es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consumo anormal de memoria del proceso “GeckoMain” al cargar fragmentos de archivos muy grandes en Firefox.

Estoy intentando subir archivos muy grandes (algunos son +30GB) por partes. Estaba utilizando Vue.JS y la biblioteca de dropzone, pero noté que al usar Firefox (pero no con Chrome) y cargar archivos grandes, la memoria se llenaría (el proceso “GeckoMain” parece crecer tanto como el archivo en sí). Después de escribir mi propio código de carga por partes, apareció el mismo problema.

Entonces reproduje la parte de carga por partes en una configuración más pequeña con solo un poco de html / javascript y un servidor de Flask en el backend. Puedes ver que al subir un archivo grande, el consumo de memoria crece en Firefox, mientras que en Chrome no lo hace. ¿Alguien tiene una idea de qué está pasando aquí? ¿Debería usar algo diferente a file.slice?

Mientras el proceso “GeckoMain” está creciendo en memoria, si uso las herramientas de desarrollador y tomo una instantánea de la memoria, antes, durante y después de la carga, no cambia.

Aquí está el código del frontend:

Y aquí está el código del backend también:

Actualización:

TL;DR : La fuga de memoria podría venir de llamadas repetidas muy rápidas a “file.slice” en Firefox, ReadableStream resuelve el problema de memoria pero pierdes la capacidad de leer el archivo “en cualquier lugar” rápidamente.

Siguiendo el consejo de Keith de usar un ReadableStream en lugar de file.slice, de hecho es posible cargar trozos sin la fuga de memoria. Esto podría sugerir que las llamadas rápidas y repetidas a file.slice en Firefox pueden causar algún tipo de fuga de memoria. No pude encontrar ningún problema o declaraciones sobre ese comportamiento.

ReadableStream resuelve el problema de memoria, pero luego pierdes la capacidad de recuperar cualquier “rebanada” del archivo que desees sin tener que leer a través del inicio y descartarlo. ¿Hay otra manera que pueda ayudarme con eso? (Para cargas reanudables, necesito poder leer cualquier rebanada del archivo que desee)

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en JavaScript, Firefox, carga de archivos y fugas de memoria, sugiero que la fuga de memoria en Firefox podría provenir de las llamadas repetidas y rápidas a la función “file.slice”. Para resolver el problema de las fugas de memoria, podría ser posible utilizar un ReadableStream. Sin embargo, el uso de un ReadableStream también podría significar perder la capacidad de leer el archivo “en cualquier lugar” rápidamente, lo cual es esencial para las cargas de archivos reanudables. Por lo tanto, puede que sea necesario encontrar otra solución para poder leer cualquier segmento del archivo para las cargas reanudables sin causar fugas de memoria.

Comments are closed.