Configurando memory_limit no php.ini - posso usar toda a memória do sistema disponível?

2

Desculpe antecipadamente pela pergunta do novato, mas eu tenho um servidor virtual dedicado no qual estou trabalhando que possui 512MB de memória RAM. Eu recentemente mudei o memory_limit do padrão de 128M para 256M. Existe alguma razão pela qual eu não gostaria de chegar até o total de 512M disponível?

    
por Jolva 08.07.2012 / 21:31

3 respostas

5

Is there any reason why I wouldn't want to bump this all the way up to the full 512M that's available?

Sim - o primeiro é 512MB por processo PHP . Seus processos realmente precisam tanto assim?

Algumas das razões que posso sugerir ainda não foram abordadas:

  1. Definir um limite tão alto só incentivará a programação desajeitada (não posso imaginar que o PHP seria a melhor linguagem para escolher se você precisa de meio gig de RAM em um único tiro)

  2. Ataques potenciais de negação de serviço (por exemplo, se você faz upload de processamento na memória, e o usuário sabe disso, eles simplesmente enviam alguns arquivos realmente grandes e o colocam offline - em vez do que você servidor 32/64 / 128M, ele vai bater todo o caminho para 512M). Isso pressupõe que você não tenha outros limites de upload que não sejam atingidos primeiro.

  3. Você tem um servidor virtual. Se é o OpenVZ / Virtuozzo e você não pode rebentar para mais de 512M, então seus processos começarão a ser mortos - rápido. O Apache provavelmente ficará offline, especialmente ao usar o dso. Isso vai colocar tudo para baixo até que seja reiniciado.

  4. Você não saberá se isso causará um grande problema até que comece a aparecer. Ao contrário do gerenciamento de memória mais complexo, o PHP não faz nenhuma tentativa de alocar tanta memória no início. Ele simplesmente diz que vai continuar tentando até tentar usar mais do que isso, depois desistir. Por tudo que você sabe, você pode não conseguir chegar perto dos 512MB - então você não pode presumir porque você reiniciou o Apache e tudo ainda funciona, você está bem.

  5. Suponha que você tenha um aplicativo que requer 512M de memória. Por que fazer esse limite para todos os outros processos também? Você corre o risco de criar os problemas acima para todos eles. Com uma instalação padrão, o script que o requer (por exemplo, um cron job grande) pode fazer ini_set('memory_limit','512M'); no PHP e aumentar seu próprio limite. Isso deixa todos os outros processos "seguros"

Aqui estão mais algumas razões de baixo nível:

  1. Todo o seu servidor virtual está alocado 512M. Isso tem que ser dividido em processos apenas para manter o servidor rodando, como (no mínimo)

    • Cron
    • Apache
    • MySQL ou algum servidor de banco de dados

    Não é possível espremer todos esses outros processos e um processo PHP de 512M, dentro de uma memória total de 512M.

  2. Além disso, o kernel otimizará o RAM não utilizado em um cache - por isso, um descuido alto pode ser penalidade de desempenho sem motivo real.

  3. Confirme se você tem swap (verifique usando top ou free -m ). Se você fizer isso, seu servidor virtual diminuirá drasticamente quando você atingir o limite. Se você não tiver swap, seus processos serão eliminados pelo hipervisor. De qualquer maneira, você verá um impacto no desempenho.

Então, em resumo, eu não aconselharia levantar um limite global para algo assim.

    
por 08.07.2012 / 21:48
1

Tenho certeza de que você pode configurá-lo para isso. Provavelmente não é aconselhável, pois seu kernel e outros processos também precisam de alguma memória. Dependendo do tipo de armazenamento que sua VM está conectada, seu sistema também pode se beneficiar do armazenamento em cache na memória

    
por 08.07.2012 / 21:39
0

O sistema operacional que executa seu aplicativo sempre precisará de memória. Se você aumentá-lo e ir além do que está disponível, poderá encontrar mais conversões de aplicativos no disco que você esperava.

    
por 08.07.2012 / 21:41