2013-10-04 10 views
6

Próbuję debugować niektóre problemy z wydajnością z konfiguracją MongoDB, i zauważyłem, że użycie pamięci rezydentnej jest bardzo niskie (około 25% pamięci systemowej) pomimo faktu, że zdarzają się od czasu do czasu występuje duża liczba błędów. Jestem zaskoczony, że użycie jest tak niskie, ponieważ MongoDB jest zależny od pamięci.Używanie pamięci rezydentnej Mongod niska

Oto zrzut najlepszych sortowanych według użycia pamięci. Można zauważyć, że żaden inny proces używa znaczącą Pamięć:

top - 21:00:47 up 136 days, 2:45, 1 user, load average: 1.35, 1.51, 0.83 
Tasks: 62 total, 1 running, 61 sleeping, 0 stopped, 0 zombie 
Cpu(s): 13.7%us, 5.2%sy, 0.0%ni, 77.3%id, 0.3%wa, 0.0%hi, 1.0%si, 2.4%st 
Mem: 1692600k total, 1676900k used, 15700k free, 12092k buffers 
Swap: 917500k total, 54088k used, 863412k free, 1473148k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
2461 mongodb 20 0 29.5g 564m 492m S 22.6 34.2 40947:09 mongod 
20306 ubuntu 20 0 24864 7412 1712 S 0.0 0.4 0:00.76 bash 
20157 root  20 0 73352 3576 2772 S 0.0 0.2 0:00.01 sshd 
    609 syslog 20 0 248m 3240 520 S 0.0 0.2 38:31.35 rsyslogd 
20304 ubuntu 20 0 73352 1668 872 S 0.0 0.1 0:00.00 sshd 
    1 root  20 0 24312 1448 708 S 0.0 0.1 0:08.71 init 
20442 ubuntu 20 0 17308 1232 944 R 0.0 0.1 0:00.54 top 

Chciałbym przynajmniej zrozumieć, dlaczego pamięć nie jest lepiej wykorzystywana przez serwer, a najlepiej, aby dowiedzieć się, jak zoptymalizować albo konfiguracja serwera lub zapytania w celu zwiększenia wydajności.

AKTUALIZACJA: To uczciwe, że zużycie pamięci wygląda na wysokie, co może prowadzić do wniosku, że to kolejny proces. Nie ma innych procesów wykorzystujących znaczącą pamięć na serwerze; pamięć wydaje się być spożywane w pamięci podręcznej, ale nie jestem jasne, dlaczego to miałoby miejsce w przypadku:

$free -m 
      total  used  free  shared buffers  cached 
Mem:   1652  1602   50   0   14  1415 
-/+ buffers/cache:  172  1480 
Swap:   895   53  842 

UPDATE: Widać, że baza danych jest nadal strona Błąd:

insert query update delete getmore command flushes mapped vsize res faults  locked db idx miss %  qr|qw ar|aw netIn netOut conn set repl  time 
    0 402 377  0 1167  446  0 24.2g 51.4g  3g  0 <redacted>:9.7%   0  0|0  1|0 217k 420k 457 mover PRI 03:58:43 
    10 295 323  0  961  592  0 24.2g 51.4g 3.01g  0 <redacted>:10.9%   0  14|0  1|1 228k 500k 485 mover PRI 03:58:44 
    10 240 220  0  698  342  0 24.2g 51.4g 3.02g  5 <redacted>:10.4%   0  0|0  0|0 164k 429k 478 mover PRI 03:58:45 
    25 449 359  0  981  479  0 24.2g 51.4g 3.02g  32 <redacted>:20.2%   0  0|0  0|0 237k 503k 479 mover PRI 03:58:46 
    18 469 337  0  958  466  0 24.2g 51.4g  3g  29 <redacted>:20.1%   0  0|0  0|0 223k 500k 490 mover PRI 03:58:47 
    9 306 238  1  759  325  0 24.2g 51.4g 2.99g  18 <redacted>:10.8%   0  6|0  1|0 154k 321k 495 mover PRI 03:58:48 
    6 301 236  1  765  325  0 24.2g 51.4g 2.99g  20 <redacted>:11.0%   0  0|0  0|0 156k 344k 501 mover PRI 03:58:49 
    11 397 318  0  995  395  0 24.2g 51.4g 2.98g  21 <redacted>:13.4%   0  0|0  0|0 198k 424k 507 mover PRI 03:58:50 
    10 544 428  0 1237  532  0 24.2g 51.4g 2.99g  13 <redacted>:15.4%   0  0|0  0|0 262k 571k 513 mover PRI 03:58:51 
    5 291 264  0  878  335  0 24.2g 51.4g 2.98g  11 <redacted>:9.8%   0  0|0  0|0 163k 330k 513 mover PRI 03:58:52 
+0

Chyba jakiś inny proces zużywa pamięć. Sprawdź 'Mem: 1692600k łącznie, 1665384k użyty, 27216k wolny' –

+0

Żaden inny proces nie używa pamięci, ale użycie pamięci podręcznej jest wysokie. Zobacz aktualizację pytania. –

+0

Jeśli mówisz o pamięci podręcznej swap, to MongoDB nie używa swap 'http: // goo.gl/VwNdqp'. Jak widzę, całkowita użyta "Mem" to 1665384k, w której mongodb wykorzystuje tylko 23,3%. Rozmiar bufora (Mem) również nie jest zbyt wysoki. Musi być jakiś proces, który sprawia, że ​​Mem (używany) do 1665384k –

Odpowiedz

4

Wygląda na to, że przyczyną tego była duża ilość nieaktywnej pamięci na serwerze, która nie został oczyszczony z użycia Mongo.

Patrząc na wynik z:

cat /proc/meminfo 

mogłem zobaczyć dużą ilość pamięci nieaktywna. Za pomocą tego polecenia jako użytkownik sudo:

free && sync && echo 3 > /proc/sys/vm/drop_caches && echo "" && free 

zwolniona pamięć nieaktywną, aw ciągu następnych 24 godzin udało mi się zobaczyć pamięć mieszkaniec mojego instancji Mongo zwiększenie zużywają resztę pamięci dostępnej na serwer.

kredytowych z poniższym poście za to instrukcjami:

http://tinylan.com/index.php/article/how-to-clear-inactive-memory-in-linux

0

MongoDB wykorzystuje tylko tyle pamięci, ile potrzebuje, więc jeśli wszystkie dane i indeksy znajdujące się w MongoDB zmieszczą się w tym, co aktualnie używasz, nie będzie można już tego naciskać.

Jeśli zestaw danych jest większy niż pamięć, istnieje kilka kwestii:

  • Sprawdź MongoDB się, aby zobaczyć, jak wiele danych uzna jej za pomocą uruchamiając mongostat i patrząc na rezydenta pamięcią
  • Czy MongoDB ponownie/zaczęło się niedawno? Jeśli jest zimny, dane nie będą przechowywane w pamięci, dopóki nie zostanie przesłana (co prowadzi do większej liczby błędów stron, które początkowo ulegają stopniowemu opadnięciu). Sprawdź komendę touch, aby uzyskać więcej informacji o "ociepleniu MongoDB w górę"
  • Sprawdź ustawienia odczytu z wyprzedzeniem. Jeśli system odczytany z wyprzedzeniem jest zbyt wysoki, wówczas MongoDB nie może wydajnie wykorzystywać pamięci w systemie. Dla MongoDB dobrym początkiem jest ustawienie 32 (czyli 16 KB odczytu z wyprzedzeniem przy założeniu, że masz 512 bajtowych bloków).
+0

Mongostat odzwierciedla to, co widać tutaj, z jego wartościami pamięci rezydentów. Czas pracy na serwerze to 3834510, więc uważam, że powinien być stabilny. Ustawienia odczytu z wyprzedzeniem * były *, jednak ustawione na 256. Zmniejszyłem je do 32 i będę monitorować, czy widzę jakąkolwiek zmianę. –

0

miałem ten sam problem: Windows Server 2008 R2, 16 GB RAM, Mongo 2.4.3. Mongo używa tylko 2 GB pamięci RAM i generuje wiele błędów stron. Zapytania są bardzo powolne. Dysk jest bezczynny, pamięć jest darmowa. Nie znaleziono innego rozwiązania niż uaktualnienie do wersji 2.6.5. Pomogło.

Powiązane problemy