Memória VPS Exchausted Mesmo Com Configurações de Luz

1

Linux noob aqui. Eu tenho um VPS de 256MB no servidor Ubuntu 11.04 e quando eu executo "free -m" o resultado mostra toda a memória sendo usada (incluindo a segunda linha re: buffers / cache). Eu achei isso muito estranho, considerando que eu só tenho 5 processos do Apache rodando cada um mastigando cerca de 20MB cada. MYSQL está ocupando 30MB. Até onde sei, e de acordo com o "top", não tenho mais porcos de memória operando.

Configurações que podem ser relevantes:

PHP memory_limit = 32M
MYSQL key_buffer = 16M
Prefork MPM Maxclients = 10

Então, quando revi essas configurações, naturalmente achei que maxclients era muito alto, então tentei mudar para 5. Agora, minha memória ainda não é mostrada como sendo 100% usada, meu site carrega muito, muito mais lento, apesar de não recebendo qualquer tráfego para além do meu no momento. Eu não entendo isso. Eu pensei que um único processo Apache lida com todos os pedidos de um cliente recebido dentro da janela "KeepAliveTimeout", que eu defini para 2 segundos. Com minha configuração inicial. de 10 maxclients, os tempos de carregamento da minha página estão em torno de 0,3ms, então um único processo deve lidar com isso sem problemas, correto?

Então, em seguida, fui a um nível extremo de 1 para maxclients. Minha memória ainda está em 100% de uso e meu site é muito lento. Eu sou um noob em uma perda completa aqui. De acordo com os muitos tutoriais que li sobre a configuração básica do servidor, eu deveria estar pronto.

Ajuda! Por favor!

Edit:
             total       used       free     shared    buffers     cached
Mem:           256        256          0          0          0          0
-/+ buffers/cache:        256          0
Swap:            0          0          0
    
por user101570 25.11.2011 / 03:43

2 respostas

2

Isso ocorre porque o Linux usa a maior parte da memória como cache e retorna partes dele conforme necessário para qualquer aplicativo executado.

Então não entre em pânico. Você está bem. Mude os MaxClients de volta para os padrões.

EDIT: parece que você está rodando no OpenVZ. Veja a resposta de David Schwartz abaixo.

    
por 25.11.2011 / 03:48
1

Você não tem troca, o que torna muito difícil para o SO conservar a memória física. Basicamente, não há lugar para colocar dados que provavelmente nunca serão acessados, mas que não podem provar que nunca serão acessados. Portanto, não tem escolha a não ser mantê-lo na RAM.

Considere, por exemplo, um serviço que começa quando o servidor é iniciado, mas nunca é acessado. Pode vincular a uma biblioteca que é realocada. Essa realocação suga as páginas de código na memória. Na inicialização, ele provavelmente alocará memória e modificará seu conteúdo. Com a troca, depois que o serviço não é executado por um longo tempo ou quando a memória é apertada, essas páginas podem ser despejadas da memória e armazenadas na troca. (O mais provável é que nunca seja recuperado, mas o kernel não pode arriscar isso - considere um serviço como ssh !)

Sem troca, o kernel não tem como remover páginas sujas, mesmo que elas não tenham sido acessadas por dias. A memória física tão preciosa é preenchida com lixo inútil.

Atualização : Aparentemente, isso é um artefato do OpenVZ. Há troca, e os números de memória que você está vendo são sem sentido. Seus problemas de desempenho podem ou não ser devidos a qualquer coisa sob seu controle.

    
por 25.11.2011 / 09:25