Solusi 1:
Yah, ada adalah cara mudah untuk melihat cache halaman kernel jika Anda memiliki ftools - "fincore" memberi Anda beberapa informasi ringkasan tentang halaman file apa yang merupakan isi dari cache.
Anda perlu memberikan daftar nama file untuk memeriksa keberadaannya di cache halaman. Ini karena informasi yang disimpan dalam tabel cache halaman kernel hanya berisi referensi blok data dan bukan nama file. fincore
akan menyelesaikan blok data file yang diberikan melalui data inode dan mencari entri masing-masing di tabel cache halaman.
Tidak ada mekanisme pencarian yang efisien untuk melakukan sebaliknya - mendapatkan nama file milik blok data akan memerlukan membaca semua inode dan blok tidak langsung pada sistem file. Jika Anda perlu mengetahui tentang setiap blok file yang disimpan di cache halaman, Anda perlu memberikan daftar semua file di sistem file Anda ke fincore
. Namun hal itu sekali lagi kemungkinan merusak pengukuran karena sejumlah besar data akan dibaca melintasi direktori dan mendapatkan semua inode dan blok tidak langsung - memasukkannya ke dalam cache halaman dan menghapus data cache halaman yang Anda coba periksa.
Solusi 2:
Anda dapat menggunakan utilitas vmtouch untuk melihat apakah file atau direktori bernama ada di cache. Anda juga dapat menggunakan alat tersebut untuk memaksa item ke dalam cache atau menguncinya ke dalam cache.
[[email protected] ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[ ] 0/5
Files: 1
Directories: 0
Resident Pages: 0/5 0/20K 0%
Elapsed: 0.000215 seconds
Sekarang saya bisa "menyentuh" ke dalam cache.
[[email protected] ~]# vmtouch -vt /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5
Files: 1
Directories: 0
Touched Pages: 5 (20K)
Elapsed: 0.005313 seconds
Sekarang untuk melihat berapa banyak yang di-cache...
[[email protected] ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5
Files: 1
Directories: 0
Resident Pages: 5/5 20K/20K 100%
Elapsed: 0.000241 seconds
Solusi 3:
Saya menulis skrip Shell yang sangat sederhana untuk menampilkan file yang di-cache dengan menggunakan linux-fincore. Karena cache adalah salah satu bagian dari memori, kode saya adalah menemukan 10 proses penggunaan RSZ teratas, dan menggunakan lsof untuk mengetahui file yang diproses dibuka, terakhir gunakan linux-fincore untuk mengetahui apakah file-file ini di-cache atau tidak.
Harap perbaiki saya jika saya salah berpikir.
#!/bin/bash
#Author: Shanker
#Time: 2016/06/08
#set -e
#set -u
#you have to install linux-fincore
if [ ! -f /usr/local/bin/linux-fincore ]
then
echo "You haven't installed linux-fincore yet"
exit
fi
#find the top 10 processs' cache file
ps -e -o pid,rss|sort -nk2 -r|head -10 |awk '{print $1}'>/tmp/cache.pids
#find all the processs' cache file
#ps -e -o pid>/tmp/cache.pids
if [ -f /tmp/cache.files ]
then
echo "the cache.files is exist, removing now "
rm -f /tmp/cache.files
fi
while read line
do
lsof -p $line 2>/dev/null|awk '{print $9}' >>/tmp/cache.files
done</tmp/cache.pids
if [ -f /tmp/cache.fincore ]
then
echo "the cache.fincore is exist, removing now"
rm -f /tmp/cache.fincore
fi
for i in `cat /tmp/cache.files`
do
if [ -f $i ]
then
echo $i >>/tmp/cache.fincore
fi
done
linux-fincore -s `cat /tmp/cache.fincore`
rm -f /tmp/cache.{pids,files,fincore}
Solusi 4:
Anda juga dapat menggunakan pcsstat (Stat Cache Halaman)https://github.com/tobert/pcstat
Semoga ini bisa membantu seseorang.
Solusi 5:
Saya menulis skrip berikut yang mencetak semua file dan status cache mereka menggunakan perintah pcsstat. Ini adalah skrip mandiri untuk sistem linux x86_64. Itu 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).
#!/bin/bash
#Exit if a variable is not set
set -o nounset
#Exit on first error
set -o errexit
if [ $# -eq 0 ]; then
echo "Usage: $0 <root-dir> [number-of-results]"
echo
echo "Example $0 /var 10"
echo "will show top 10 files in /var which are loaded in cache"
exit
fi
ROOT=$1
#Number of results to show
HOW_MANY=50
[ -n ${2-} ] && HOW_MANY=$2
SCRIPT_DIR="$( cd -P "$( dirname "$0" )" && pwd )"
if [ ! -x $SCRIPT_DIR/pcstat ]; then
(
cd $SCRIPT_DIR
rm -f pcstat
curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64
chmod +x pcstat
)
fi
FIND="find ${ROOT} -not ( -path /proc -prune ) -not ( -path /sys -prune ) -type f -size +0c -print0"
$FIND | xargs -0 ${SCRIPT_DIR}/pcstat -terse -nohdr | sort --field-separator=, -r -n -k 6 | head -n ${HOW_MANY}