Как узнать общую физическую память (ОЗУ) моего linux-окна, подходящую для анализа синтаксисом оболочки script?

Я набираю оболочку script, чтобы узнать общую физическую память в некоторых RHEL-блоках Linux.

Прежде всего, я хочу подчеркнуть, что меня интересует общая физическая память, признанная ядром, а не только доступная память. Поэтому, пожалуйста, избегайте ответов, предлагающих прочитать /proc/meminfo или использовать бесплатный, верхний или sar команды. Во всех этих случаях их значения общая память означают " доступная память".

Первой мыслью было прочитать загрузочные сообщения ядра:

Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)

Но в некоторых Linux-окнах из-за использования программного обеспечения EMC2 PowerPath и его загружаемых сообщений наводнения при запуске ядра это полезное сообщение загрузочного ядра недоступно, даже в /var/log/dmesg.

Вторым вариантом была команда dmidecode (я предупрежден о возможном несоответствии явной памяти RAM и реальной ОЗУ из-за ограничений некоторых старых ядер и архитектур). Опция - память упрощает script, но я понял, что более старые версии этой команды не имеют опции - память.

Моим последним шансом была команда getconf. Он сообщает размер страницы памяти, но не общее количество физических страниц - системная переменная _PHYS_PAGES - это доступные физические страницы, а не общие физические страницы.

# getconf -a | grep PAGES
PAGESIZE                           4096
_AVPHYS_PAGES                      1049978
_PHYS_PAGES                        15466409

Мой вопрос: есть ли другой способ получить общий объем физической памяти, подходящий для анализа синтаксисом оболочки script?

Ответ 1

Если вас интересует физическое ОЗУ, используйте команду dmidecode. Это дает вам гораздо больше информации, чем просто это, но в зависимости от вашего варианта использования вы также можете узнать, есть ли у 8G в системе 2 х жесткие диски или 4 х 2 ГБ палочки.

Ответ 2

Вы пробовали cat /proc/meminfo? Затем вы можете вытеснить то, что хотите, MemTotal, например.

Обновленный пример (btw. thanks, Masta):

awk '/MemTotal/ {print $2}' /proc/meminfo

Ответ 3

cat /proc/meminfo | grep MemTotal или бесплатно дает вам точный объем оперативной памяти вашего сервера. Это не "доступная память".

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

cat /proc/meminfo | grep MemTotal

эквивалентно

 getconf -a | grep PAGES | awk 'BEGIN {total = 1} {if (NR == 1 || NR == 3) total *=$NF} END {print total / 1024" kB"}'

Ответ 4

Добавьте последние 2 записи /proc/meminfo, они дадут вам точную память на хосте.

Пример:

DirectMap4k:       10240 kB
DirectMap2M:     4184064 kB

10240 + 4184064 = 4194304 kB = 4096 МБ.

Ответ 5

Еще одна полезная команда:
vmstat -s | grep memory
Выходной сигнал на моей машине:

  2050060 K total memory
  1092992 K used memory
   743072 K active memory
   177084 K inactive memory
   957068 K free memory
   385388 K buffer memory

другая полезная команда для получения информации о памяти:
free
выход образца:

             total       used       free     shared    buffers     cached
Mem:       2050060    1093324     956736        108     385392     386812
-/+ buffers/cache:     321120    1728940
Swap:      2095100       2732    2092368

Одно из наблюдений заключается в том, что команда free также предоставляет информацию об области подкачки.
Следующая ссылка может быть полезна для вас:
http://www.linuxnix.com/find-ram-details-in-linuxunix/

Ответ 6

free -h | awk '/Mem\:/ { print $2 }' 

Это предоставит вам полную память в вашей системе в удобном для чтения формате и автоматически масштабируется до соответствующего устройства (например, байты, КБ, МБ или ГБ).

Ответ 7

dmidecode -t 17 | grep  Size:

Добавление всех вышеуказанных значений, отображаемых после того, как "Размер:" даст полный физический размер всех папок RAM на сервере.

Ответ 8

Это следующие способы:

1./Proc/MemInfo

MemTotal: 8152200 kB

MemFree: 760808 kB

Вы можете написать код или script, чтобы проанализировать его.

2. Используйте sysconf, используя макросы ниже

sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);

3. Используя системный вызов sysinfo

int sysinfo (struct sysinfo * info);

struct sysinfo {      .

   .

   unsigned long totalram;  /*Total memory size to use */

   unsigned long freeram;   /* Available memory size*/

   .

   . 

  }; 

Ответ 9

free -m | awk '/Mem:/{print $2}'

Ответ 10

Я нахожу htop полезным инструментом.

sudo apt-get install htop

а затем

free -m

предоставит необходимую вам информацию.