Как узнать общую физическую память (ОЗУ) моего 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
предоставит необходимую вам информацию.