Я установил 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
и , они покажут количество данных на диске, кэшированных ОЗУ для более быстрого доступа к часто используемым файлам, и покажут объем данных, которые будут записаны на диск.buffers
cached
buffered
Как вы знаете, доступ к диску намного медленнее, чем к ОЗУ, поэтому для повышения производительности неплохо хранить часть данных с диска в ОЗУ. У вас есть 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
команда вычисляет данные из этого файла.