O MongoDB não está usando toda a memória do meu sistema para o conjunto de trabalho?

1

Minha máquina tem 42 GB de RAM e o tamanho total do índice é 40 GB (o conjunto de trabalho deve ser 100% preenchido, pois os índices estão todos em colunas UUID). Eu suspeito que meu conjunto de trabalho é muito grande, pois a falha de página começou a aumentar tremendamente, por exemplo, de média 20 saltou para 120.

Descobri que parece que o mongod não está usando toda a minha memória, por exemplo

ps ax | grep mongod
23051 mongod    20   0  338g 7.7g 7.5g S 87.8 16.4   1533:17 /usr/bin/mongod -f /etc/mongod.conf                                                                                                                                           

Apenas 7.7G é usado atualmente.

E com o estimador workingSet do 2.4, descobri que o conjunto de trabalho acima dos 50s tem apenas cerca de 650MB, parece inesperado em relação ao tamanho dos meus dados.

"workingSet" : {
    "note" : "thisIsAnEstimate",
    "pagesInMemory" : 166069,
    "computationTimeMicros" : 49281,
    "overSeconds" : 50
},

Você tem alguma ideia?

    
por Howard 30.05.2013 / 10:14

1 resposta

1

Primeiro, sugiro dar uma olhada aqui:

link

Essa questão discute muito o mesmo tópico. Para resumir um pouco: por causa de como o registro no diário funciona no MongoDB e como ela remapeia a memória, pode fazer com que a memória residente do processo mongod pareça artificialmente baixa. Se você der uma olhada na saída do comando free e seu cache do sistema de arquivos estiver relativamente cheio, então você estará mais propenso a acertar essa anomalia de relatório de memória residente (supondo que mongod seja o único consumidor realmente pesado de memória o sistema, claro).

No entanto, o MongoDB (no Linux, pelo menos) relata falhas de página (reais), não as falhas de página soft que ocorrem quando um processo solicita páginas que já estão na memória, mas que não são "de propriedade" do processo solicitante. Por isso, você está certo em se preocupar com o aumento de falhas de página, é uma das melhores medidas para sugerir que seus dados não estão se encaixando na memória e, portanto, você está tendo que acertar o disco.

Em termos de confirmação de que tudo o que você quer está na memória, você pode usar o comando de toque para carregar o índice e os dados desejados no cache do sistema de arquivos (não residente). Deve-se notar que esta é uma ferramenta um pouco brusca, pois simplesmente carregará todo o conjunto de dados e / ou todo o índice no cache, e poderá causar carga / travamento no sistema - use com cautela. Pode ser mais eficiente, dependendo do conjunto de dados, carregar dados recentes ou conhecidos com uma consulta de localização e uma explicação. Algo parecido com isto:

db.collection.find({criteria for loading data}).explain()

Ou, para garantir que um índice específico seja carregado, adicione uma dica explícita:

db.collection.find({criteria for loading data}).hint({index name})explain()

Outra coisa é olhar para a eficiência com a qual você está carregando dados na memória quando atinge o disco. Em geral, isso é uma troca entre IO e utilização de memória, mas se sua prioridade número um é a eficiência de memória e você tem algum IO sobressalente para lançar o problema, então no MongoDB você geralmente desejará ajustar seu readahead configurações usando o blockdev aqui e aqui .

    
por 30.05.2013 / 11:15

Tags