Pergunta

Ao executar proc_nice(), é realmente bom ing Apache thread?

Se assim for, e se o usuário atual (não-super-usuário) pode não renice a sua prioridade original, que é matar o Apache segmento apropriado (apache_child_terminate) em um Apache 2.0 x server?

O problema é que eu estou tentando limitar o impacto de um aplicativo que permite que o usuário execute o Ad-Hack consultas.As Consultas podem ser enormes, e a resultante da transformação de dados requer uma grande quantidade de Memória e CPU.

Eu já re-escrito que o processo seja mais corrente, ajudando - se com o consumo de memória, mas eu também gostaria de processo para executar uma prioridade mais baixa.No entanto, eu não posso deixar o Apache thread de prioridade baixa, como temos um monte de alta prioridade web services em execução na mesma caixa.

TIA

Foi útil?

Solução

Nesse tipo de situação, uma solução se, muitas vezes, para não fazer esse tipo de trabalho pesado dentro os processos do Apache, mas de qualquer um :

  • executar um PHP externa do processo, usando algo como shell_exec, se , por exemplo -- isto é, se você tem de trabalhar em modo síncrono (ou seja, se você não puder executar as tarefas de um par de minutos mais tarde)
  • enviar a tarefa para um FIFO sistema, e imediatamente retornar uma mensagem ao usuário dizendo: "sua tarefa será processado em breve"
    • e tem algum outro processo (lançado através de um crontab cada minuto, por exemplo) verifique que a fila FIFO
    • e fazer o processamento, há algo na fila
    • Esse processo, em si, pode ser executado em baixa prioridade.


Sempre que possível, especialmente se o heavy cálculos levar algum tempo, gostaria de ir para a segunda solução :

  • Ele permite aos usuários obter algum feedback imediatamente :"o servidor tenha recebido o seu pedido, e vai processá-lo em breve"
  • Não manter Apaches processos de "trabalhar" por muito tempo :o pesado é feito por outros processos
  • Se, um dia, você precisa de uma tal quantidade de poder de processamento que um servidor não é mais suficiente, este tipo de sistema será mais fácil de escala :basta adicionar um segundo servidor que vai pegar a partir da mesma fila FIFO
  • Se o seu servidor é realmente muito carregado, você pode parar o processamento da fila, pelo menos por algum tempo, para que a carga possa obter um melhor -- por exemplo, isso pode ser útil se a sua crítica de serviços da web são muito utilizados em um determinado período de tempo.


Outro (bonito, mas eu não tentei ainda) a solução seria usar algum tipo de ferramenta como, por exemplo, Gearman :

Gearman fornece um aplicativo genérico quadro de fazenda de trabalhos para outras máquinas ou processos que são melhores adequado para fazer o trabalho.
Ele permite que você para fazer o trabalho em paralelo, para carregar equilíbrio de processamento, e para chamar a funções entre linguagens.
Ele pode ser usado em uma variedade de aplicações, a partir de web de alta disponibilidade sites o transporte de replicação de banco de dados eventos.
Em outras palavras, é o sistema nervoso como distribuído o processamento se comunica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top