Bagaimana cara menggunakan memori (RAM digunakan) menggunakan perintah Linux?

30

Saya mencoba untuk mengambil memori yang digunakan (RAM) dalam persentase menggunakan perintah Linux. Cpanel saya menampilkan Memory Used yang harus saya tampilkan pada halaman web tertentu.

Dari forum, saya menemukan bahwa memori yang benar dapat ditemukan dari yang berikut:

free -m

Hasil:

-/+ buffers/cache:        492       1555

- / + buffer / cache: berisi penggunaan memori yang benar. Saya tidak tahu bagaimana mem-parse info ini atau jika ada perintah berbeda untuk mendapatkan memori yang digunakan dalam persentase.

codelogn
sumber
3
Itu sudah dijawab di sini! stackoverflow.com/questions/10585978/… mis .: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher
@szboardstretcher Saya suka ini:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me
Tanpa mengetahui nomor apa yang Anda butuhkan, sulit untuk memberi tahu Anda nomor apa yang harus Anda gunakan. Namun dalam banyak kasus salah satu dari angka-angka itu sangat naif dan membutuhkan informasi tren dan konteks.
eckes

Jawaban:

33

Berikut ini contoh keluaran dari gratis:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

Baris pertama dari angka ( Mem:) berisi daftar

  • total ingatan
  • used ingatan
  • free ingatan
  • penggunaan shared
  • penggunaan buffers
  • cache filesystem penggunaan ( cached)

Di baris ini used termasuk buffer dan cache dan dampak ini gratis. Ini bukan memori "benar" bebas Anda karena sistem akan membuang cache jika diperlukan untuk memenuhi permintaan alokasi.

Baris berikutnya ( -/+ buffers/cache:) memberi kita memori yang digunakan dan kosong yang sebenarnya seolah-olah tidak ada buffer atau cache.

Baris terakhir ( Swap) memberikan penggunaan memori swap. Tidak ada buffer atau cache untuk swap karena tidak masuk akal untuk meletakkan hal-hal ini pada disk fisik.

Untuk menampilkan memori yang digunakan (minus buffer dan cache) Anda dapat menggunakan perintah seperti:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Ini mengambil baris ketiga dan membagi bekas / total * 100.

Dan untuk memori bebas:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657
casey
sumber
1
Apakah "- / + buffer / cache: 5779440 18904464" benar penggunaan RAM / status server?
codelogn
2
Sebenarnya, tidak, tapi praktis, ya. Penggunaan memori sebenarnya adalah baris ke-2 (digunakan: 20746840) tetapi bagian dari penggunaan memori itu adalah buffer dan cache yang hanya untuk mempercepat waktu respons pada sistem Anda. Baris ketiga (digunakan: 5779440) memberi Anda jumlah memori yang sebenarnya digunakan oleh program dan angka memori inilah yang menentukan berapa banyak lagi yang bisa dialokasikan oleh program Anda. Jika tujuan Anda adalah mendapatkan memori bebas / bekas dalam arti program apa yang benar-benar digunakan dan apa yang sebenarnya dapat Anda alokasikan, maka ya, baris 3 tepat untuk Anda.
Casey
1
Perhatikan bahwa dengan versi yang lebih baru free, -/+ buffers/cachesepenuhnya dihilangkan dengan sengaja, dan nilai yang ditunjukkan pada usedkolom sekarang tidak termasuk buffer dan cache secara default. Lihat di sini: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson
10

Saya akan menyebutkan tentang bagaimana mengurai informasi pada freeperintah. Untuk menemukan persentase, Anda dapat menggunakan seperti yang disarankan dalam 2 jawaban lainnya.

Ini dijelaskan dengan jelas di sini . Saya akan mencoba menjelaskan dari apa yang saya miliki di sistem saya.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Sekarang, mari kita lihat apa yang sebenarnya mewakili berbagai angka.

Line1

  • 7869 Menunjukkan memori / RAM fisik yang tersedia untuk mesin saya.
  • 4402 Menunjukkan memori / RAM yang digunakan oleh sistem saya.
  • 3466 Mengindikasikan Total RAM gratis dan tersedia untuk menjalankan proses baru.
  • 0 Menunjukkan memori bersama. Kolom ini sudah usang dan dapat dihapus dalam rilis gratis di masa mendatang.
  • 208 Menunjukkan total RAM yang didukung oleh berbagai aplikasi di Linux.
  • 3497 Menunjukkan total RAM yang digunakan untuk Caching data untuk tujuan di masa mendatang.

Line2

-/+ buffers/cache:        696       7173

Bagaimana cara menghitung nilai 696 dan 7173 yang diperoleh di Line2?

Total digunakan ( 4402 ) - Total buffer RAM ( 208 ) - Total RAM untuk caching ( 3497 ) harus merupakan RAM yang digunakan aktual dalam sistem. Ini mengembalikan saya 697 yang merupakan output RAM yang digunakan sebenarnya di baris kedua.

Sekarang, Total Available ( 7869 ) - Actual Used ( 696 ) seharusnya memberi Anda memori bebas yaitu 7173 dalam hal ini yang juga didapat sebagai output di baris kedua.

Ramesh
sumber
6

Meskipun duplikat seperti yang ditunjukkan oleh @szboardstretcher, preferensi saya dari solusi (dalam pertanyaan asli) adalah yang di bawah ini, khususnya karena Anda ingin menguraikan ke halaman web.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Keluaran:

used: 82.68%, buffers: 42.81%, swap: 1.27%
Simply_Me
sumber
4
FYI Saya mendapatkan yang berikut menggunakan iniused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj
Apa perintah penuh yang digunakan? Saya memeriksanya dalam centos.
Simply_Me
Maaf untuk pemformatan tapi ini dia$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj
Untuk beberapa versi awk (mawk), tanda persen perlu digandakan untuk mencetaknya, jika tidak, awk melempar kesalahan, seperti ini: printf ("used:% .0f %%"), $ 3 / $ 2 * 100 Ini berfungsi dengan keduanya mawk dan gawk.
Ján Lalinský
2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Menambahkan baris baru setelah nomor swap

Andy
sumber
1

Untuk hingga CentOS 7 Anda dapat mencoba

cat /proc/meminfo 

untuk melihat penggunaan nyata dari memori oleh proses.

Cosmo Arun
sumber