Como faço para reduzir o uso de RAM no meu servidor?

4

Eu lancei recentemente um site muito popular, mas estou com problemas de escalabilidade. Meu site faz uso pesado de FFmpeg e nos horários de pico o uso da RAM atinge o ponto de 2 GB rapidamente e o arquivo de troca começa a ser usado . O uso da CPU começa a aumentar também.

Os usuários reclamam que o site está lento. Eles dizem isso porque todas as instâncias do FFmpeg são executadas muito devagar, porque o número é executado ao mesmo tempo. Os usuários fazem uso do FFmpeg no meu servidor em tempo real.

Existe algo que eu possa considerar ou fazer para diminuir o uso do servidor e a RAM apenas disparando? Talvez haja algo melhor que o FFmpeg (!).

A única solução é "jogar algum dinheiro" em um servidor mais poderoso?

Eu dei poucas informações, por favor, peça mais, então esse problema pode ser resolvido.

    
por Abs 23.05.2009 / 00:42

6 respostas

12

Bem, uma solução fácil seria enfileirar as tarefas do Ffmpeg, portanto, apenas um número fixo está sendo executado a qualquer momento. E você deve considerar realmente executar os processos do Ffmpeg em uma máquina separada do servidor da Web.

    
por 23.05.2009 / 00:42
4

Este é um problema comum de estruturação, não tanto um problema de memória. Parece que você está colando tudo em uma caixa? Processamento de banco de dados, Web e MPG? Isso não vai escalar muito bem!

Independentemente da sua aplicação, qualquer processamento intensivo funcionará melhor em várias máquinas usando um sistema em lote. Ao distribuir a carga por várias caixas e manter o trabalho realmente intenso longe da camada da Web, seus usuários agradecerão!

Sua camada da web só deve estar veiculando a interface. Você deve ter mais de uma máquina dedicada ao processamento de vídeo em segundo plano. Isso deve ficar disponível para veiculação pela camada da Web quando estiver pronto.

A melhor referência sobre este tópico que eu encontrei é Construindo Websites Escaláveis por Cal Henderson, ex-CTO do Flickr. O link anterior é para a Amazon, para que você possa visualizar o livro no barato. Este linke para o Google Livros também permite que você leia.

Boa sorte!

    
por 23.05.2009 / 00:42
1

Eu acho que você provavelmente poderia fazer algumas coisas para melhorar o uso da memória, mas quando tudo estiver dito e feito, você provavelmente terá saído melhor comprando um pouco mais de memória. Tenho certeza que vou ser rejeitado por esta resposta, mas estou apenas pensando sobre a economia de corrigir este problema.

    
por 23.05.2009 / 01:51
1

Acho que a coisa mais rápida e fácil de fazer seria comprar um novo servidor. Sério, um Dell 2950 com 32 GB de RAM e 8 núcleos a 3,2 GHz eu acho que foi apenas US $ 8 ou US $ 10k CAD . Seria fácil gastar metade disso e ainda conseguir algo que possa executar muitas tarefas paralelas e ter muita memória RAM. Você definitivamente não seria limitado a 2 GB e a trocar para o disco.

    
por 23.05.2009 / 20:44
0

O ffmpeg é muito ligado à CPU, não apenas à memória. O aplicativo dificilmente será mais rápido porque a caixa tem mais RAM - mais instâncias significam que cada uma delas fica mais lenta e tem menos CPU para usar.

A menos que você possa otimizar o próprio ffmpeg ou usar uma fila async, você precisa obter mais máquinas.

Procure principalmente CPU com RAM suficiente para não iniciar a troca antes de maximizar a utilização em todas as CPUs.

    
por 23.05.2009 / 05:39
0

Correndo o risco de soar como um dróide de marketing de uma empresa de computação em nuvem, é para isso que a computação em nuvem se destina.

Eu gostaria de sugerir o uso de algo como o Amazon EC2 ou o Rackspace Cloud. Crie uma imagem básica que contenha o ffmpeg e uma interface que permita que o ffmpeg seja chamado remotamente a partir do seu aplicativo. Crie algumas instâncias dessa imagem e certifique-se de que, usando o provedor de nuvem escolhido, você possa criar e destruir instâncias dessa imagem para corresponder à carga. Seu aplicativo deve então delegar todas as tarefas do ffmpeg para seus servidores em nuvem e controlar o número de servidores em nuvem que são baseados no número de tarefas do ffmpeg que ele precisa processar de forma síncrona. Isso manterá o que considero um gargalo no seu aplicativo, transcodificação de vídeo / etc, separado do seu aplicativo e capaz de escalar à vontade.

    
por 30.05.2010 / 16:23