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

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

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

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

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

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

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

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

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

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

10 ответов


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


ты пробовал cat /proc/meminfo? Затем вы можете grep, что вы хотите,используется параметр memtotal например

обновленный пример (кстати. спасибо, Маста):

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

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"}'

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

пример:

DirectMap4k:       10240 kB
DirectMap2M:     4184064 kB

10240 + 4184064 = 4194304 КБ = 4096 МБ.


еще одна полезная команда:
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/


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

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


dmidecode -t 17 | grep  Size:

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


общий объем Mb:

x=$(awk '/MemTotal/ {print }' /proc/meminfo)
echo $((x/1024))

или:

x=$(awk '/MemTotal/ {print }' /proc/meminfo) ; echo $((x/1024))

это способы :

1. / proc / meminfo

MemTotal: 8152200 kB

MemFree: 760808 kB

вы можете написать код или скрипт для его анализа.

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

sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);

3. С помощью системного вызова sysinfo

int sysinfo(struct sysinfo * info);

структура программы sysinfo { .

   .

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

   unsigned long freeram;   /* Available memory size*/

   .

   . 

  }; 

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

sudo apt-get install htop

а то

free-m

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