Arbeiten an einer Tube- Site. Ich starte Videos über ffmpeg auf einem Linux- Server, um sie in mp4 umzuwandeln .
Die Serverspezifikationen:
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
Das Problem beim Testen ist, dass selbst wenn nur 4-5 auf einmal ausgeführt werden, die Auslastung des Servers schnell auf durchschnittlich 36 steigt. Dies ist nur eine einzelne Person. Ich stelle mir vor, wenn es geöffnet wird, werden viele Leute auf einmal hochladen.
Es scheint ffmpeg versucht, alle verfügbaren Ressourcen pro Conversion zu nutzen.
Ich habe gehört, dass Sie die Einstellung -threads ändern können, aber ich kann sie nicht finden. Ich habe einen 8-CPU-Server. Es wird nur für Konvertierungen verwendet, daher habe ich gehört, dass die beste Einstellung zwischen 2 und 4 liegt. Ich kann es testen.
Aber wie ändere ich diese Einstellung? Alles, was ich online sehe, behandelt diese Einstellung, aber nicht die Schritte, um sie zu ändern.
-threads
vor dem Eingang wenden Sie diese Option auf den Eingang (den Decoder) an. Eine verallgemeinerte Verwendung istffmpeg [global options] [input options] -i input [output options] output
.(global)
.-threads
Argument vor oder nach dem-i
Argument setzen? Wie soll ich außerdem bestimmen, wie viele Threads ich verwenden soll? Ich mache im Grunde nur-c copy
Das mag ein bisschen alt sein, aber das klingt nach einer perfekten Aufgabe für einen Container wie Docker.
full horsepower
(wie denjello es nannte)Jetzt können Sie den Ressourcenverbrauch einer einzelnen ffmpeg-Instanz einschränken, ohne auch nur die ffmpeg-Befehlszeilenoptionen zu verwenden. Und nicht nur CPU, sondern auch Speicher und IOs.
Mehr noch: Vielleicht haben Sie verschiedene Aufgaben, die möglicherweise im Hintergrund ausgeführt werden, und es ist Ihnen egal, wie lange sie dauern, und Sie haben Aufgaben, die schnell ausgeführt werden sollen, damit Sie verschiedene Aufgaben bewerten können.
Siehe https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources
Auf github gibt es bereits ein vordefiniertes ffmpeg-Image: https://github.com/jrottenberg/ffmpeg
Eine einzelne Konvertierung wird aufgrund des Overheads wahrscheinlich langsamer ausgeführt. Wenn Sie jedoch mehrere Instanzen gleichzeitig ausführen, kann dies ein großer Vorteil sein. Alle diese Funktionen lassen sich sehr gut skalieren, ganz zu schweigen von der verbesserten Sicherheit, da jede Aufgabe vom zugrunde liegenden Betriebssystem isoliert ist.
quelle
--rm
Flag aus, um eine Aufgabe auszuführen und den Container nach dem Beenden zu entfernen. Dies ist eine ganz normale Sache, die Administratoren 2019 tun könnten und sollten. Insbesondere für Dinge wie die Dokumentenkonvertierung. Konvertierung schlägt fehl? Versuchen Sie es mit einer anderen Konverter-Version, ohne Ihre lokale Toolchain zu aktualisieren / zu downgraden? Sie trauen dem Dokument nicht, weil es aus dem Internet heruntergeladen wurde? Isolieren Sie die Aufgabe in einem Container. Ffmpeg ist keine Ausnahme. 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?
Checken Sie das Repo aus, untersuchen Sie die Docker-Datei unddocker build -t myimage
erstellen Sie selbst ein lokales Image. Oder erstelle dein eigenes Dockerfile, es ist kein Hexenwerk github.com/alfg/docker-ffmpeg/blob/master/Dockerfile