GNU/Linux >> Belajar Linux >  >> Linux

Menentukan penggunaan memori dengan benar di Linux

Tanpa malu-malu menyalin/menempel jawaban saya dari serverfault beberapa hari yang lalu :-)

Sistem memori virtual linux tidak sesederhana itu. Anda tidak bisa hanya menjumlahkan semua bidang RSS dan mendapatkan nilai yang dilaporkan used oleh free . Ada banyak alasan untuk ini, tetapi saya akan membahas beberapa alasan terbesar.

  • Saat proses bercabang, induk dan anak akan ditampilkan dengan RSS yang sama. Namun linux menggunakan copy-on-write sehingga kedua proses benar-benar menggunakan memori yang sama. Hanya ketika salah satu proses memodifikasi memori, itu akan benar-benar digandakan.
    Ini akan menyebabkan free angka menjadi lebih kecil dari top Jumlah RSS.

  • Nilai RSS tidak menyertakan memori bersama. Karena memori bersama tidak dimiliki oleh satu proses, top tidak memasukkannya ke dalam RSS.
    Ini akan menyebabkan free angka menjadi lebih besar dari top Jumlah RSS.


Jika Anda mencari nomor memori yang bertambah, lihat smem:

smem adalah alat yang dapat memberikan banyak laporan tentang penggunaan memori pada sistem Linux. Tidak seperti alat yang ada, smem dapat melaporkan ukuran set proporsional (PSS), yang merupakan representasi yang lebih berarti dari jumlah memori yang digunakan oleh pustaka dan aplikasi dalam sistem memori virtual.

Karena sebagian besar memori fisik biasanya digunakan bersama di antara beberapa aplikasi, ukuran standar penggunaan memori yang dikenal sebagai ukuran tetap penduduk (RSS) akan secara signifikan melebih-lebihkan penggunaan memori. Sebaliknya, PSS mengukur "bagian yang adil" setiap aplikasi dari setiap area yang dibagikan untuk memberikan ukuran yang realistis.

Misalnya di sini:

# smem -t
  PID User     Command                         Swap      USS      PSS      RSS
...
10593 root     /usr/lib/chromium-browser/c        0    22868    26439    49364 
11500 root     /usr/lib/chromium-browser/c        0    22612    26486    49732 
10474 browser  /usr/lib/chromium-browser/c        0    39232    43806    61560 
 7777 user     /usr/lib/thunderbird/thunde        0    89652    91118   102756 
-------------------------------------------------------------------------------
  118 4                                       40364   594228   653873  1153092 

Jadi PSS adalah kolom yang menarik di sini karena memperhitungkan memori bersama.
Tidak seperti RSS itu berarti untuk menambahkannya. Kami mendapatkan total 654Mb untuk proses userland di sini.

Keluaran seluruh sistem memberi tahu tentang sisanya:

# smem -tw
Area                           Used      Cache   Noncache 
firmware/hardware                 0          0          0 
kernel image                      0          0          0 
kernel dynamic memory        345784     297092      48692 
userspace memory             654056     181076     472980 
free memory                   15828      15828          0 
----------------------------------------------------------
                            1015668     493996     521672 

Jadi 1Gb total RAM =654Mb proses userland + 346Mb kernel mem + 16Mb gratis
(beri atau ambil beberapa Mb)

Secara keseluruhan, sekitar setengah dari memori digunakan untuk cache (494Mb).

Pertanyaan bonus :apa itu cache userland vs cache kernel di sini ?

btw untuk sesuatu yang visual coba:

# smem  --pie=name


Alat yang sangat bagus adalah pmap yang mencantumkan penggunaan memori saat ini untuk proses tertentu:

pmap -d PID

Untuk informasi lebih lanjut tentang hal itu lihat halaman manual man pmap dan lihat juga 20 Alat Pemantau Sistem Linux yang Harus Diketahui Setiap SysAdmin, daftar alat hebat yang selalu saya gunakan untuk mendapatkan informasi tentang kotak Linux saya.


Linux
  1. Penggunaan Memori Linux

  2. Linux – Batasi Penggunaan Memori Untuk Proses Linux Tunggal?

  3. Linux – Menentukan Penggunaan Memori dengan Benar di Linux?

  1. Menentukan penggunaan disk di Linux menggunakan perintah "du"

  2. membatasi penggunaan memori di R di bawah linux

  3. Grafik penggunaan memori proses di Linux

  1. Linux – Penggunaan Memori Nyata?

  2. Perintah Linux df

  3. Ubuntu Linux:Memproses memori swap dan penggunaan memori