Я набираю сценарий оболочки, чтобы узнать общую физическую память в некоторых окнах RHEL linux.
Прежде всего, я хочу подчеркнуть, что меня интересует общая физическая память, распознаваемая ядром, а не только доступная память . Поэтому, пожалуйста, избегайте ответов, предлагающих прочитать / proc / meminfo или использовать команды free , top или sar - во всех этих случаях их значения « общая память » означают значения « доступная память ».
Первой мыслью было прочитать сообщения загрузочного ядра:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Но в некоторых Linux-системах из-за использования программного обеспечения EMC2 PowerPath и его лавинных загрузочных сообщений при запуске ядра это полезное загрузочное сообщение ядра недоступно, даже в файле / var / log / dmesg .
Второй вариант - это команда dmidecode (меня предупреждают о возможном несоответствии ОЗУ, распознаваемой ядром, и реальной ОЗУ из-за ограничений некоторых старых ядер и архитектур). Параметр --memory упрощает сценарий, но я понял, что более старые версии этой команды не имеют параметра --memory .
Моим последним шансом была команда getconf . Он сообщает размер страницы памяти, но не общее количество физических страниц - системная переменная _PHYS_PAGES кажется доступными физическими страницами, а не общим количеством физических страниц.
# getconf -a | grep PAGES РАЗМЕР СТРАНИЦЫ 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
Мой вопрос: есть ли другой способ получить общий объем физической памяти, пригодный для анализа с помощью сценария оболочки?
источник
Ответы:
Если вас интересует физическая оперативная память, используйте команду
dmidecode
. Он дает вам гораздо больше информации, чем просто это, но в зависимости от вашего варианта использования вы также можете узнать, идет ли 8G в системе от флешек 2x4 ГБ или 4x2GB.источник
Вы пробовали
cat /proc/meminfo
? Затем вы можете использовать awk или grep , что хотите, MemTotal, напримерили
источник
awk '/MemTotal/ {print $2}' /proc/meminfo
Чем меньше трубок, тем лучше.grep -oP '^MemTotal:\s+\K.*' /proc/meminfo
awk
стандартизован POSIX , ноgrep
«s варианты-o
и-P
не являются! Ваш пример будет нормально работать с GNUgrep
(но GNU по-прежнему говорит, что реализация PCRE является экспериментальной), но, вероятно, не будет работать с другими реализациями.cat /proc/meminfo | grep MemTotal
или бесплатно дает вам точный объем оперативной памяти, имеющейся на вашем сервере. Это не «доступная память».Я предполагаю, что ваша проблема возникает, когда у вас есть виртуальная машина, и вы хотите рассчитать полный объем памяти, размещенной на гипервизоре, но в этом случае вам придется войти в гипервизор.
эквивалентно
источник
cat /proc/meminfo | grep MemTotal
отчетамиMemTotal: 3957032 kB
о 4 ГБ памяти это немного меньше 4 ГБ. OP (и я) ищут что-то, что сообщало бы о 4 ГБ.grep MemTotal /proc/meminfo
3957032 kB
просто неправильно маркирован. Он должен быть помечен как kiB, как указано в этом сообщении . Это означает, что на самом деле он сообщает 4 052 000 768 байт, что немного больше 4 ГБ. Это связано с тем, что реализации / proc / meminfo предшествуют нотации kiB./proc/meminfo
числа в отчетах в kiB являются чрезвычайно важной частью этого обсуждения, независимо от того, собирался ли @TvE задать другой вопрос.Добавьте последние 2 записи
/proc/meminfo
, они дают вам точную память, присутствующую на хосте.Пример:
10240 + 4184064 = 4194304 КБ = 4096 МБ.
источник
Еще одна полезная команда:
vmstat -s | grep memory
пример вывода на моем компьютере:
другая полезная команда для получения информации о памяти:
free
пример вывода:
Одно наблюдение здесь заключается в том, что команда также
free
дает информацию о пространстве подкачки.Следующая ссылка может быть вам полезна:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
источник
vmstat -s -S M | grep ' memory'
Это предоставит вам общий объем памяти в вашей системе в удобочитаемом формате и автоматически масштабируется до соответствующих единиц (например, байтов, КБ, МБ или ГБ).
источник
Добавление всех вышеуказанных значений, отображаемых после «Size:», даст точный общий физический размер всех модулей RAM на сервере.
источник
Общая оперативная память
Рассчитайте общий объем оперативной памяти с помощью sys-fs.
Пример вывода для системы 4 ГБ:
объяснение
Количество байтов в блоке памяти (шестнадцатеричное значение). Использование 0x перед значением гарантирует, что оно будет правильно обработано во время вычисления.
Перебор всех доступных блоков памяти, чтобы убедиться, что они подключены к сети, и прибавить рассчитанный размер блока к totalmem, если они есть.
Вы можете изменить или удалить это, если предпочитаете другое состояние памяти.
источник
\
) для продолжения в следующей строке - на самом деле вы можете использовать&&
для этой цели в конце строки.Общий объем памяти в
Mb
:или:
источник
Это способы:
1. / proc / meminfo
Вы можете написать код или скрипт для его анализа.
2. Используйте sysconf, используя указанные ниже макросы.
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. Используя системный вызов sysinfo
int sysinfo (struct sysinfo * информация);
struct sysinfo {.
источник
Нахожу
htop
полезный инструмент.а потом
предоставит вам необходимую информацию.
источник