Trabajando en un sitio de tubo . Estoy ejecutando videos a través de ffmpeg en un servidor dedicado de Linux para convertir a mp4 .
Las especificaciones del servidor:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Stepping: 3
CPU MHz: 3491.749
BogoMIPS: 6983.49
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
El problema durante las pruebas es que incluso haciendo solo 4-5 a la vez, el servidor se dispara a un promedio de alrededor de 36. Esta es solo una persona. Me imagino que cuando se abra, muchas personas subirán a la vez.
Parece que ffmpeg intenta usar todos los recursos disponibles por conversión.
He oído que hay una configuración de hilos que puede cambiar, pero no puedo encontrarla. Tengo un servidor de 8 cpu. Solo se usa para conversiones, por lo que he oído que la mejor configuración sería entre 2 y 4. Puedo probarlo.
Pero, ¿cómo cambio esta configuración? Todo lo que veo en línea discute esta configuración, pero no los pasos para cambiarla.
-threads
antes de la entrada está aplicando esta opción la entrada (el decodificador). Un uso generalizado esffmpeg [global options] [input options] -i input [output options] output
.(global)
.-threads
argumento antes o después del-i
argumento? Además, ¿cómo debo determinar cuántos hilos debo usar? Básicamente solo estoy haciendo-c copy
Esto puede ser un poco viejo, pero esto suena como una tarea perfecta para un contenedor como docker.
full horsepower
(como lo llamó denjello)Ahora puede limitar la cantidad de recursos que puede consumir una sola instancia de ffmpeg sin siquiera usar las opciones de línea de comandos de ffmpeg. Y no solo CPU sino también memoria e IO.
Aún más: tal vez tengas diferentes tareas que pueden ejecutarse en segundo plano y no te importa cuánto tiempo tarden y tienes tareas que deberían ejecutarse rápidamente, por lo que puedes poner un peso en diferentes tareas.
Ver https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources
Ya hay una imagen predefinida de ffmpeg en github: https://github.com/jrottenberg/ffmpeg
Es probable que una sola conversión se ejecute más lentamente debido a la sobrecarga, pero si ejecuta varias instancias simultáneamente, esto podría ser un gran beneficio. Todo esto se escalará muy bien, sin mencionar la seguridad mejorada porque cada tarea está aislada del sistema operativo subyacente.
fuente
--rm
bandera para realizar una tarea y quitar el contenedor después de la salida es algo totalmente normal que los administradores podrían y deberían hacer en 2019. Especialmente para cosas como la conversión de documentos. La conversión falla? ¿Prueba otra versión de convertidor sin actualizar / degradar su cadena de herramientas local? ¿No confía en el documento porque se ha descargado de Internet? Aislar la tarea en un contenedor. Ffmpeg no es una excepción. cvedetails.com/vulnerability-list/vendor_id-3611/Ffmpeg.htmlPerhaps the document converter docker image was compromised and sent copy of all your documents to a remote server. So, using docker images increase possibility such vulnerability. What then?
revise el repositorio, investigue el dockerfile y úselodocker build -t myimage
para crear una imagen local usted mismo. O cree su propio dockerfile, no es ciencia de cohetes github.com/alfg/docker-ffmpeg/blob/master/Dockerfile