Pertanyaan ini dilatarbelakangi oleh keterkejutan saya ketika saya menemukan bahwa kernel Mac OS X menggunakan RAM sebesar 750MB .
Saya telah menggunakan Linux selama 20 tahun, dan saya selalu "tahu" bahwa penggunaan RAM kernel dikerdilkan oleh X (apakah benar? Pernahkah itu benar?).
Jadi, setelah beberapa googling, saya mencoba slabtop
yang memberi tahu saya:
Active / Total Size (% used) : 68112.73K / 72009.73K (94.6%)
Apakah ini berarti bahwa kernel saya menggunakan ~ 72MB RAM sekarang?
(Mengingat RSS yang top
dilaporkan Xorg
sebagai 17M, kernel sekarang mengerdilkan X, bukan sebaliknya).
Apa penggunaan (kisaran) kernel RAM "normal" untuk laptop?
Mengapa MacOS menggunakan urutan besarnya lebih banyak RAM daripada Linux?
PS. Tidak ada jawaban di sini yang menjawab pertanyaan terakhir, jadi silakan lihat pertanyaan terkait:
echo 3 > /proc/sys/vm/drop_caches
, maka saya hanya memiliki 80MB digunakan.Jawaban:
Kernel sedikit keliru. Kernel Linux terdiri dari beberapa proses / utas + modul (
lsmod
) sehingga untuk mendapatkan gambaran lengkap Anda harus melihat keseluruhan bola dan bukan hanya satu komponen.Tambang saya secara tidak sengaja menunjukkan
slabtop
:Halaman manual untuk
slabtop
juga mengatakan ini:Menjatuhkan cache
Menjatuhkan cache saya seperti yang disarankan oleh @derobert dalam komentar di bawah pertanyaan Anda:
Mengirim nomor 3 melakukan hal berikut: pagecache, gigi palsu, dan inode gratis. Saya membahas hal ini lebih lanjut dalam T&J T&J berjudul: Apakah ada cara atau alat untuk membuang cache dan buffer memori? "Jadi, 110MB ruang saya digunakan dengan hanya mempertahankan informasi tentang pagecache, gigi palsu dan inode.
informasi tambahan
slabtop
lebih detail. Itu berjudul: Perintah Linux hari ini: slabtop .Jadi berapa banyak RAM yang digunakan Kernel saya?
Gambar ini agak foggier bagi saya, tetapi di sini ada hal-hal yang saya "pikir" kita tahu.
Lempeng
Kita bisa mendapatkan snapshot dari penggunaan Slab menggunakan teknik ini. Intinya kita dapat menarik informasi ini
/proc/meminfo
.Modul
Kita juga bisa mendapatkan nilai ukuran untuk modul Kernel (tidak jelas apakah ukurannya dari pada disk atau ketika di RAM) dengan menarik nilai-nilai ini dari
/proc/modules
:Slabinfo
Banyak rincian tentang SLAB yang dapat diakses dalam struktur proc ini,
/proc/slabinfo
:Dmesg
Ketika sistem Anda boot ada baris yang melaporkan penggunaan memori dari kernel Linux setelah itu dimuat.
Referensi
sumber
grep Slab /proc/meminfo
./proc/slabinfo
yang tampaknya menjadi sumberslabtop
, sehingga orang dapat menghitung jumlah dari sini untuk jumlah total yang lebih akurat./proc/modules
lebih cenderung memuat ukuran modul dalam memori karena modul pada-disk biasanya dikompresi (misalnya pada Fedora 27 itu xz), saya sudah memeriksatg3
driver NIC, ukuran pada disk (ukuran file asli atau terkompresi) tidak tidak cocok dengan ukuran byte yang muncul di/proc/modules
.Bagaimana dengan ini:
Itu ada di mesin yang baru saja di-boot, mesin yang sangat kecil berjalan tanpa kepala dengan kernel normal. Jadi tidak perlu banyak.
Sebagai derobert mengisyaratkan, kernel akan menggunakan memori yang tersedia untuk caching dan itulah yang Anda lihat
slabtop
. Selain cache file, ini ada hubungannya dengan memori yang dapat dibagi dari proses userspace yang tidak lagi digunakan. Kernel membiarkannya di sana sampai hal-hal yang sama diperlukan lagi, atau sesuatu yang secara aktif membutuhkan RAM, dalam hal ini dilupakan. Sebuah analogi akan mengambil sebuah buku dari rak dan meletakkannya terbuka untuk dibaca di atas meja: ketika Anda selesai membaca, Anda dapat membiarkan buku itu terbuka di meja jika Anda perlu melihatnya lagi.sumber
Pada server RAM 512 GB ini yang menjalankan Solaris, kernel menggunakan 25 GB:
Yang lebih kecil memiliki lebih dari setengah RAM yang digunakan oleh kernel:
Tidak ada yang perlu dikhawatirkan, RAM yang tidak digunakan adalah RAM yang terbuang.
sumber
echo ::memstat | mdb -k
beberapa server produksi Solaris 10 yang ada sebelum pembaruan 10/09.