Di sini output dari free -m
:
total used free shared buffers cached
Mem: 7188 6894 294 0 249 5945
-/+ buffers/cache: 698 6489
Swap: 0 0 0
Saya dapat melihat hampir 6GB
(5945MB) kehabisan memori 7GB
digunakan dalam caching file. Saya tahu cara membersihkan cache. Pertanyaan saya adalah: Apakah mungkin melihat file (atau inode) mana yang sedang di-cache?
linux
memory-usage
ssapkota
sumber
sumber
buffers
dancached
:sysctl -w vm.drop_caches=3
. Anda mungkin ingin membaca lebih lanjut tentangnya, sebelum menggunakan. Terkadang itu hanya dibutuhkan. Ini tersedia - ini harus menjadi alasan lain :)Jawaban:
Nah, ada adalah cara mudah untuk melihat pada tembolok halaman kernel jika Anda kebetulan memiliki ftools - "fincore" memberikan beberapa ringkasan informasi tentang apa halaman file adalah isi dari cache.
Anda harus menyediakan daftar nama file untuk memeriksa keberadaannya di cache halaman. Ini karena informasi yang disimpan dalam tabel cache halaman kernel hanya akan berisi referensi blok data dan bukan nama file.
fincore
akan menyelesaikan blok data file yang diberikan melalui data inode dan mencari entri masing-masing dalam tabel cache halaman.Tidak ada mekanisme pencarian yang efisien untuk melakukan sebaliknya - mendapatkan nama file yang dimiliki oleh blok data akan memerlukan membaca semua inode dan blok tidak langsung pada sistem file. Jika Anda perlu tahu tentang setiap blok file yang disimpan dalam cache halaman, Anda harus menyediakan daftar semua file pada sistem file Anda
fincore
. Tapi itu lagi kemungkinan akan merusak pengukuran karena sejumlah besar data akan dibaca melintasi direktori dan mendapatkan semua inode dan blok tidak langsung - menempatkan mereka ke dalam cache halaman dan mengusir data cache halaman yang Anda coba periksa.sumber
fincore
akan menyelesaikan blok data file yang diberikan melalui data inode dan mencari entri masing-masing dalam tabel cache halaman. Tidak ada mekanisme pencarian yang efisien melakukan kebalikan - mendapatkan nama file milik blok data akan memerlukan membaca semua inode dan blok tidak langsung pada sistem file. Dengan demikian, secara algoritmik Anda akan lebih baik menyediakan daftar semua file pada sistem filefincore
Anda jika Anda benar-benar membutuhkan tingkat informasi ini.Anda dapat menggunakan utilitas vmtouch untuk melihat apakah file atau direktori bernama dalam cache. Anda juga dapat menggunakan alat untuk memaksa item ke dalam cache atau menguncinya ke dalam cache.
Sekarang saya bisa "menyentuhnya" ke dalam cache.
Sekarang untuk melihat berapa banyak yang di-cache ...
sumber
Saya menulis skrip shell yang sangat sederhana untuk menampilkan file-file yang di-cache dengan menggunakan linux-fincore. Karena cache adalah salah satu bagian dari memori, kode saya adalah menemukan 10 besar penggunaan proses RSZ, dan penggunaan lsof untuk mengetahui file yang dibuka, akhirnya gunakan linux-fincore untuk mengetahui apakah file-file ini di-cache atau tidak.
Harap perbaiki saya jika saya salah berpikir.
sumber
lsof
juga melaporkan file yang dipetakan ke dalam ruang-proses-alamat (dan tidak harus di-cache). Kemungkinan besar juga sebagian besar file hanya akan di-cache sebagian / jarang ...Anda juga dapat menggunakan pcstat (Stat Cache Halaman) https://github.com/tobert/pcstat
Semoga ini bisa membantu seseorang.
sumber
Saya menulis skrip berikut yang mencetak semua file dan status cache mereka menggunakan perintah pcstat. Ini adalah skrip mandiri untuk sistem linux x86_64. Ini mengunduh pcstat jika diperlukan.
Argumen pertama adalah lokasi sistem file untuk dianalisis dan argumen kedua adalah jumlah hasil (Top N dengan jumlah halaman dalam cache).
sumber