“nice” para gerenciamento de memória

4

Antes da pergunta, eu dou a você um pouco de experiência: estou executando um site em um VPS. O VEL itselmf executa o servidor web apache, o código PHP que produz as páginas com acesso a um banco de dados SQLite e executa algumas tarefas em segundo plano acionadas por tarefas agendadas.

Essas tarefas em segundo plano atualizam principalmente os valores do banco de dados e adicionam novos registros a serem exibidos aos usuários do site.

Em termos de desempenho, a capacidade de resposta do site é uma prioridade, mas as tarefas em segundo plano não são sensíveis ao tempo, não há problema algum se elas precisarem ser exibidas, desaceleradas, .... Considerando que não tenho muitas visitas (em torno de 4.000 visualizações de páginas / dia, a maioria delas em cache), posso dar ao luxo de executá-las com baixa prioridade, e elas ainda fazem o trabalho. CPU sábio, eu corro apache com "niceness" de 0 (o padrão), e as tarefas de fundo têm um "niceness" indo de 10 a 18. E está tudo bem.

A memória é um problema porque algumas dessas tarefas têm alto consumo de memória. Alguns deles realmente falhar porque não há memória suficiente quando eles precisam. O que geralmente acontece é:

  1. Tarefa 1 que consome muita memória é acionada
  2. Os usuários acessam o website = > Tarefa 1 está atrasada (não tenho problema com isso)
  3. A tarefa 1 é retomada
  4. A tarefa 2 de alto consumo de memória é acionada. Devido a atrasos, a tarefa 1 não está concluída
  5. Os usuários acessam o website = > ambas as tarefas estão atrasadas (ainda sem problemas)
  6. A tarefa 1 é retomada e precisa de mais memória = > Não resta memória e a tarefa 1 falha
  7. A tarefa 2 termina
  8. O usuário visita o site
  9. ...

O VPS é executado em um sistema de 1 Gig de RAM e atualmente não há SWAP definido. Eu acho que adicionando um espaço SWAP (de graça, uma vez que não me custa mais), poderia ser uma boa solução para o meu problema. No decorrer do evento descrito acima, parte da memória usada pelas tarefas em segundo plano poderia ser trocada, reduzindo assim o desempenho dessas tarefas, mas, novamente, não tenho nenhum problema com isso.

O que eu gostaria de evitar é trocar a memória do apache, porque isso reduziria a capacidade de resposta do site para o usuário final. Assim como indiquei com "nice" que o apache é mais importante que as tarefas do backgroudn. Se você encontrar outra solução para o meu problema, você é bem-vindo para sugerir qualquer coisa. Eu também estou melhorando as tarefas em segundo plano para reduzir a pegada de memória, mas isso está demorando um pouco.

    
por Snowangelic 26.12.2011 / 13:28

1 resposta

5

Você pode usar cgroups para fazer isso. Ele permite que você defina limites para memória e memória + troca, para que você possa forçar os processos a trocar.

Alternativamente, também permite ajustar a troca de cada cgroup de forma independente, para que você possa aumentar as chances de que suas páginas de plano de fundo sejam trocadas:

link

    
por 26.12.2011 / 14:42