Pergunta

Meu aplicativo Rails possui várias tarefas que são transferidas em processos em segundo plano, como redimensionamento de imagens e upload para S3. estou a usar touched_job para gerenciar esses processos.

Esses processos, particularmente os PDFs de miniatura (usando o GhostScript) e as imagens de redimensionamento (usando o ImageMagick), são intensivas em CPU e geralmente consomem tempo 100% da CPU. Como esses trabalhos estão sendo executados no mesmo servidor (Redhat Linux) que o próprio aplicativo da Web, bem como o banco de dados, eles podem levar nosso aplicativo da Web não respondendo.

Uma solução é obter outro servidor no qual executar apenas os trabalhos em segundo plano. Eu acho que essa seria a solução ideal? No entanto, como isso não é algo que eu posso fazer imediatamente, me pergunto se seria possível fazer com que os trabalhos de fundo sejam executados com uma prioridade do sistema operacional mais baixa e, portanto, consumam menos ciclos de CPU para fazer seu trabalho?

Pensamentos apreciados.

Foi útil?

Solução

Se não estou errado, delayed_job Usa processos de trabalhadores que lidam com todos os trabalhos em segundo plano. Deve ser facilmente possível alterar a prioridade de agendamento do sistema operacional do processo quando você o iniciar.

Então, em vez de, por exemplo:

ruby script/delayed_job -e production -n 2 start

tentar:

nice -n 15 ruby script/delayed_job -e production -n 2 start
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top