Trabalhando em um site de tubos . Estou executando vídeos através do ffmpeg em um servidor linux dedicado para converter para mp4 .
O servidor especifica:
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
O problema durante o teste é que, mesmo executando apenas 4-5 de uma vez, o servidor carrega disparados para uma média de cerca de 36. Essa é apenas uma pessoa. Eu imagino que, quando abrir, muitas pessoas farão o upload de uma só vez.
Parece que o ffmpeg tenta usar todos os recursos disponíveis por conversão.
Ouvi dizer que há um cenário de roscas que você pode alterar, mas não consigo encontrá-lo. Eu tenho um servidor de 8 cpu. É usado apenas para conversões, então ouvi dizer que a melhor configuração seria entre 2 e 4. Posso testá-la.
Mas como altero essa configuração? Tudo o que vejo online discute essa configuração, mas não as etapas para alterá-la.
-threads
antes da entrada você está aplicando esta opção a entrada (o decodificador). Um uso generalizado éffmpeg [global options] [input options] -i input [output options] output
.(global)
.-threads
argumento antes ou depois do-i
argumento? Além disso, como devo determinar quantos threads devo usar? Basicamente, eu estou apenas fazendo-c copy
Isso pode ser um pouco antigo, mas parece uma tarefa perfeita para um contêiner como docker.
full horsepower
(como denjello o chamava)Agora você pode limitar a quantidade de recursos que uma única instância do ffmpeg pode consumir sem usar as opções de linha de comando do ffmpeg. E não apenas CPU, mas também memória e E / S.
Ainda mais: talvez você tenha tarefas diferentes que podem ser executadas em segundo plano e não se importe quanto tempo elas demoram e você tenha tarefas que devem ser executadas rapidamente, para que você possa dar peso a diferentes tarefas.
Consulte https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources
Já existe uma imagem predefinida do ffmpeg no github: https://github.com/jrottenberg/ffmpeg
Uma única conversão provavelmente será mais lenta por causa da sobrecarga, mas se você executar várias instâncias simultaneamente, isso poderá ser um grande benefício. Qualquer isso será dimensionado muito bem, sem mencionar a segurança aprimorada, pois cada tarefa é isolada do sistema operacional subjacente.
fonte
--rm
sinalizador para executar uma tarefa e remover o contêiner após a saída é algo totalmente normal que os administradores podem e devem fazer em 2019. Especialmente para coisas como conversão de documentos. A conversão falha? Experimente outra versão do conversor sem atualizar / desclassificar sua cadeia de ferramentas local? Você não confia no documento porque ele foi baixado da Internet? Isole a tarefa em um contêiner. Ffmpeg não é uma exceção. 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?
faça o checkout do repositório, investigue o dockerfile e use-odocker build -t myimage
para criar uma imagem local. Ou criar seu próprio dockerfile, não é ciência de foguetes github.com/alfg/docker-ffmpeg/blob/master/Dockerfile