Saya mengetik skrip shell untuk mengetahui total memori fisik di beberapa kotak linux RHEL.
Pertama-tama saya ingin menekankan bahwa saya tertarik pada total memori fisik yang dikenali oleh kernel, bukan hanya memori yang tersedia . Oleh karena itu, mohon, hindari jawaban yang menyarankan untuk membaca / proc / meminfo atau menggunakan perintah gratis , atas atau sar - Dalam semua kasus ini, nilai " memori total " berarti " memori yang tersedia ".
Pikiran pertama adalah membaca pesan kernel boot:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Tetapi di beberapa kotak linux, karena penggunaan perangkat lunak PowerPath EMC2 dan pesan boot yang membanjir di awal kernel, pesan kernel boot yang berguna itu tidak tersedia, bahkan di file / var / log / dmesg .
Opsi kedua adalah perintah dmidecode (saya diperingatkan terhadap kemungkinan ketidakcocokan RAM yang dikenali kernel dan RAM asli karena keterbatasan beberapa kernel dan arsitektur yang lebih lama). Opsi --memory menyederhanakan skrip tetapi saya menyadari bahwa rilis lama dari perintah itu tidak memiliki opsi --memory .
Kesempatan terakhir saya adalah perintah getconf . Ini melaporkan ukuran halaman memori, tetapi bukan jumlah total halaman fisik - variabel sistem _PHYS_PAGES tampaknya merupakan halaman fisik yang tersedia, bukan total halaman fisik.
# getconf -a | grep HALAMAN HALAMAN 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
Pertanyaan saya: Apakah ada cara lain untuk mendapatkan jumlah total memori fisik, yang cocok untuk diurai oleh skrip shell?
sumber
Jawaban:
Jika Anda tertarik dengan RAM fisik, gunakan perintah
dmidecode
. Ini memberi Anda lebih banyak informasi daripada hanya itu, tetapi tergantung pada kasus penggunaan Anda, Anda mungkin juga ingin tahu apakah 8G dalam sistem berasal dari tongkat 2x4GB atau tongkat 4x2GB.sumber
Apakah Anda mencoba
cat /proc/meminfo
? Anda kemudian dapat awk atau grep apa yang Anda inginkan, MemTotal misalnyaatau
sumber
awk '/MemTotal/ {print $2}' /proc/meminfo
Semakin sedikit pipa semakin baik.grep -oP '^MemTotal:\s+\K.*' /proc/meminfo
awk
distandarisasi oleh POSIX tetapigrep
opsi-o
dan-P
tidak! Contoh Anda akan berfungsi dengan baik dengan GNUgrep
(tetapi GNU masih mengatakan bahwa implementasi PCRE bersifat eksperimental) tetapi mungkin tidak akan berfungsi dengan implementasi lain.cat /proc/meminfo | grep MemTotal
atau gratis memberi Anda jumlah pasti RAM yang dimiliki server Anda. Ini bukan "memori yang tersedia".Saya kira masalah Anda muncul ketika Anda memiliki VM dan Anda ingin menghitung jumlah penuh memori yang dihosting oleh hypervisor tetapi Anda harus masuk ke hypervisor dalam kasus itu.
setara dengan
sumber
cat /proc/meminfo | grep MemTotal
laporan memori 4GBMemTotal: 3957032 kB
, itu agak kurang dari 4GB. OP (dan saya) mencari sesuatu yang akan melaporkan 4GB.grep MemTotal /proc/meminfo
3957032 kB
baru saja diberi label yang salah. Ini harus diberi label kiB, seperti yang ditunjukkan dalam posting ini . Itu berarti itu benar-benar melaporkan 4.052.000.768 byte, yang sedikit lebih besar dari 4 GB. Hal ini disebabkan oleh fakta bahwa / proc / meminfo menerapkan sebelum notasi kiB./proc/meminfo
melaporkan angka dalam kiB adalah bagian yang sangat penting dari diskusi ini, terlepas dari apakah @TvE bermaksud mengajukan pertanyaan yang berbeda.Tambahkan 2 entri terakhir
/proc/meminfo
, mereka memberi Anda memori yang tepat yang ada di host.Contoh:
10240 + 4184064 = 4194304 kB = 4096 MB.
sumber
Satu perintah lagi yang berguna:
vmstat -s | grep memory
contoh keluaran di mesin saya adalah:
perintah lain yang berguna untuk mendapatkan informasi memori adalah:
free
keluaran sampel adalah:
Satu pengamatan di sini adalah, perintah
free
memberikan informasi tentang ruang swap juga.Tautan berikut mungkin berguna untuk Anda:
http://www.linuxnix.com/find-ram-details-in-linuxunix/
sumber
vmstat -s -S M | grep ' memory'
Ini akan memberi Anda total memori dalam sistem Anda dalam format yang dapat dibaca manusia dan secara otomatis menskalakan ke unit yang sesuai (mis. Byte, KB, MB, atau GB).
sumber
Menambahkan semua nilai di atas yang ditampilkan setelah "Size:" akan memberikan ukuran fisik total yang tepat dari semua RAM stick di server.
sumber
Total memori online
Hitung total memori online menggunakan sys-fs.
Contoh keluaran untuk sistem 4 GB:
Penjelasan
Jumlah byte dalam blok memori (nilai hex). Menggunakan 0x di depan nilai memastikannya ditangani dengan benar selama penghitungan.
Iterasi di atas semua blok memori yang tersedia untuk memverifikasi mereka sedang online dan menambahkan ukuran blok terhitung ke totalmem jika mereka.
Anda dapat mengubah atau menghapus ini jika Anda lebih suka status memori lain.
sumber
\
) untuk melanjutkan ke baris berikutnya - sebenarnya, Anda dapat menggunakan&&
di akhir baris untuk tujuan itu.Total memori di
Mb
:atau:
sumber
Ini caranya:
1. / proc / meminfo
Anda dapat menulis kode atau skrip untuk menguraikannya.
2. Gunakan sysconf dengan menggunakan makro di bawah ini
sysconf (_SC_PHYS_PAGES) * sysconf (_SC_PAGESIZE);
3. Dengan menggunakan system call sysinfo
int sysinfo (struct sysinfo * info);
struct sysinfo {.
sumber
Saya menemukan
htop
alat yang berguna.lalu
akan memberikan informasi yang Anda butuhkan.
sumber