Как получить хорошее представление об использовании оперативной памяти

Как получить хорошее представление об использовании оперативной памяти

Я установил Ubuntu 14.10 на сервер. Основная задача сервера — запуск установки MongoDB вместе с несколькими приложениями NodeJS. Приложения NodeJS будут работать непрерывно и принимать запросы извне.

Время от времени поступают большие запросы, из-за чего некоторые приложения NodeJS используют много оперативной памяти в течение короткого периода времени. Я пытался отслеживать это, но не уверен, что делать с моими выводами.

До сих пор я использовал две команды, чтобы получить представление об использовании оперативной памяти. Это

free -m

и

sudo htop

Первый показывает это:

                        total       used       free     shared    buffers     cached                                           
Mem:                     3442       3158       283          6        111       1203                                           
-/+ buffers/cache:                  1842       1599                                                                         
Swap:                    0          0          0    

Если посмотреть на это, то я бы сказал, что свободно около 280 МБ ОЗУ. Что не кажется большим количеством.

htop говорит мне следующее:

  1  [|||                                         0.8%]     Tasks: 61, 129 thr; 2 running
  2  [|||                                         1.0%]     Load average: 1.16 1.15 0.93
  Mem[|||||||||||||||||||||||||||||||||||||1979/3442MB]     Uptime: 29 days, 00:23:31
  Swp[                                           0/0MB]   

Я не совсем понимаю, как это читать. Может ли кто-нибудь мне помочь?

Думаю, мой вопрос в конечном итоге сводится к следующему:

  • Как я могу получить представление о доступном объеме оперативной памяти?
  • Когда оперативной памяти слишком мало? 300 МБ считается очень малым? Опасно?

решение1

TL;DR: Вам не о чем беспокоиться, пока -/+ buffers/cacheстрока показывает достаточно свободной памяти. Если она показывает мало свободной памяти и вы постоянно загружаетесь swapна диск, то вам следует беспокоиться.

Объяснение:

У вас все хорошо с текущим сценарием использования RAM. Давайте рассмотрим вывод, free -mчтобы разбить его:

Все столбцы free -mговорят сами за себя. Важно отметить, что вам не нужно беспокоиться, когда использование памяти высокое, не видя объем кэшированной и буферизованной памяти.

Из вывода видно, что вы использовали 3158 МБ из 3442 МБ ОЗУ, простое вычитание показало бы, что у вас осталось только 283 МБ свободного места для выделения новым программам. Это неверно, вам нужно также посмотреть на столбцы cachedи , они покажут количество данных на диске, кэшированных ОЗУ для более быстрого доступа к часто используемым файлам, и покажут объем данных, которые будут записаны на диск.bufferscachedbuffered

Как вы знаете, доступ к диску намного медленнее, чем к ОЗУ, поэтому для повышения производительности неплохо хранить часть данных с диска в ОЗУ. У вас есть 1203 МБ кэшированных и 111 МБ буферизованных данных. Хорошо, что ваша память кэширует этот объем, а не просто держит этот объем ОЗУ в бездействии. Это значительно улучшит вашу производительность.

Чтобы получить фактический объем оперативной памяти, который используется без кэширования/буферизации, посмотрите на -/+ buffers/cache:строку. Этот результат показан путем вычитания кэшированного/буферизованного объема. Как вы видите, у вас свободно 1599 МБ, так что в этом состоянии все выглядит нормально. Если вы видите, что значения в этой строке низкие, то вам нужно насторожиться и посмотреть на использование оперативной памяти.

Также обратите внимание, что когда новая программа должна быть запущена, а памяти после кэширования недостаточно, старые кэши будут автоматически очищены, чтобы освободить место для новой программы. Поэтому, пока фактическое использование памяти невелико и вы постоянно подкачиваетесь на диск, хорошо иметь значительный объем в кэше, так как он эффективно «использует» вашу память.

решение2

heemayl уже охватил большую часть информации о фактической доступной памяти. Мой пост здесь — просто пара однострочников, которые вы можете добавить в свой .bashrcпсевдоним, чтобы использовать как быстрый обзор фактического использования:

free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'

И пример вывода:

$ free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x  }'                                                                 
Used 1.2G Out of 5.6G

Если вы заинтересованы в более глубоком исследовании памяти, используйте cat /proc/meminfo, где перечислено много информации, иэтот блогпоможет вам понять, как freeкоманда вычисляет данные из этого файла.

Связанный контент